我在Swift中使用ReactiveCocoa。我需要使用以下方法:
rac_signalForSelector(selector: Selector, fromProtocol: Protocol?)
传递选择器与Selector("method:")
一起正常工作,但我找不到如何将委托协议传递给fromProtocol
参数。
将协议类型从委托传递给像这样的方法签名的正确方法是什么?
编辑:添加方法文档和最佳尝试
此方法的文档如下:
选择器 - 要观察其调用的选择器。如果它不存在,它将使用协议中的信息实现,并且可以接受非对象参数并返回值。这不能将C数组或联合作为参数或返回类型。
protocol - 声明选择器的协议。如果选择器尚未在接收器上实现,则将用于类型信息。这不能为NULL,并且选择器必须存在于此协议中。
我尝试过发送 DelegateType.self
,最后收到此错误:
无法找到接受提供的参数的
rac_signalForSelector
的重载
答案 0 :(得分:4)
您在宣布协议时是否使用@objc
?
我认为SomeProtocol.self
是通过它的正确方法,但由于您将其传递给obj-c API,因此需要以@objc
为前缀this example from the docs:
@objc protocol HasArea {
var area: Double { get }
}
编辑:原来所讨论的协议来自一个库(用objective-c编写,因此已经与objective-c兼容),未在Swift中定义。
在这种情况下,它可能是一个编译器错误,所以在你做任何其他事情之前确保你使用最新版本的Xcode (在撰写本文时为beta 3)。
如果这样做不成功,我认为在修复编译器错误之前,Tommy使用NSProtocolFromString
的想法是最好的办法。