可以将Swift协议定义为动态吗?

时间:2014-09-17 00:33:51

标签: objective-c swift typhoon

我转换了most of my application to Swift。剩下的是一些Objective-C协议,以及一些应该使用Swift习语代替Objective-C风格的代码。

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

Protocol can't be dynamic

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

以下解决方案不起作用:

public protocol WeatherReportDao : NSObjectProtocol { //Extend NSObjectProtocol 
}

1 个答案:

答案 0 :(得分:5)

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

@objc public protocol CityDao {

//etc. . . 

}

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

不过,它运作得很好。