Swift class 不符合 Objective-C 错误处理协议

Swift class does not conform to Objective-C protocol with error handling

我有Objective-C协议

@protocol SomeObjCProtocol
- (BOOL) doSomethingWithError: (NSError **)error;
@end

Swiftclass

class SwiftClass : SomeObjCProtocol
{
    func doSomething() throws {    
    }
}

编译器给我一个 error

Type 'SwiftClass' does not conform to protocol 'SomeObjCProtocol'"

有什么解决办法可以消除这个错误吗? 我正在使用 XCode 7 Beta 4

有两个问题:

  • Swift 2 映射 func doSomething() throws 到 Objective-C 方法 - (BOOL) doSomethingAndReturnError: (NSError **)error;,也就是 与您的协议方法不同。
  • 协议方法必须用 @objc 属性标记为 "Objective-C compatible"。

有两种可能的解决方案:

解决方案1:将Objective-C协议方法重命名为

@protocol SomeObjCProtocol
- (BOOL) doSomethingAndReturnError: (NSError **)error;
@end

方案二: 保持 Objective-C 协议方法不变,并为 Swift 方法指定 Objective-C 映射 明确地:

@objc(doSomethingWithError:) func doSomething() throws {
    // Do stuff
}

当遇到该错误信息时,问题的来源之一可能是符合 Objetive C 协议的 Swift class 不是从 NSObject 继承的。