Swift3 Swift 3.0发布方法

Swift3 Swift 3.0发布方法,swift3,Swift3,我在objc中有一个协议,它看起来像: @protocol TestProtocol - (void)releaseProtocol; @end Swift 3.0自动将其转换为 protocol TestProtocol { func release() } 但这就产生了一个问题,因为如果我有一个继承自NSObject的类,编译器会抱怨,因为协议的release()与NSObjectProtocol的release()冲突 class TestClass: TestProtocol

我在objc中有一个协议,它看起来像:

@protocol TestProtocol
- (void)releaseProtocol;
@end
Swift 3.0自动将其转换为

protocol TestProtocol {
    func release()
}
但这就产生了一个问题,因为如果我有一个继承自NSObject的类,编译器会抱怨,因为协议的release()与NSObjectProtocol的release()冲突

class TestClass: TestProtocol, NSObject 
{   
   func release() { #?@#.! }  // Compiler error
}
此时,我无法更改源协议,因为它位于SDK中,我无法修改


有没有办法告诉swift编译器将其转换为其他名称,或者指定方法fooRelease()对应于TestProtocol.release()方法?

该协议的Objective-C声明必须更改。如果您自己无法更改,我建议您向作者发出请求,要求他们使用
NS\u SWIFT\u名称
,以实现SWIFT互操作性。您可能不是使用此SDK的唯一遇到此问题的人

因此,应声明如下:

@protocol TestProtocol
- (void)releaseProtocol NS_SWIFT_NAME(releaseProtocol());
@end

真名没那么糟糕,只是简单了一点。在任何情况下,ObjC名称在将来都会更改,实际上我维护的是原始SDK。但我想知道是否有一种方法可以克服这种转换,而不发布新版本的SDK。我们都不喜欢将不向后兼容的更改分发到公共API,但您可能需要在这一点上咬紧牙关。此外,这不会只影响Swift 3用户吗?由于这不适用于使用基于
NSObject
的类的Swift 3用户,这取决于在其非基于
NSObject
的类中实现了
release()
的Swift 3用户群有多大。。。