3

我已将我的大部分应用程序转换为 Swift。剩下的是一些 Objective-C 协议,以及一些应该使用 Swift 习惯用法代替 Objective-C 风格的代码。

我已经使用Typhoon完成了我的应用程序的组装。现在,在将其中一种协议转换为 Swift 之后,我注意到初始化程序不再是动态的(DI 库需要)。因此,我尝试将其显式标记为动态,但出现以下错误:

协议不能是动态的

它抱怨第三个参数(我的 Swift 协议)永远不能作为 Objective-C 的一部分参与。这似乎是对 Swift/ObjC 互操作性的普遍限制。是在 ObjC 中定义协议并让 Swift 类实现它的唯一解决方案吗?

以下解决方案不起作用:

public protocol WeatherReportDao : NSObjectProtocol { //Extend NSObjectProtocol 
}
4

1 回答 1

5

似乎最好的解决方法是将 @objc 指令添加到 Swift 协议中。例子:

@objc public protocol CityDao {

//etc. . . 

}

. . 对我来说,这是过时的,因为我真正想传达的是协议需要动态调度——这可以超越 Swift-ObjC 的互操作性。

不过,它工作得很好。

于 2014-09-17T00:38:53.400 回答