@protocol(DelegateType)的Swift等价物

时间:2014-07-07 17:42:05

标签: ios objective-c xcode swift

我在Swift中使用ReactiveCocoa。我需要使用以下方法:

rac_signalForSelector(selector: Selector, fromProtocol: Protocol?)

传递选择器与Selector("method:")一起正常工作,但我找不到如何将委托协议传递给fromProtocol参数。

将协议类型从委托传递给像这样的方法签名的正确方法是什么?

编辑:添加方法文档和最佳尝试

此方法的文档如下:

  

选择器 - 要观察其调用的选择器。如果它不存在,它将使用协议中的信息实现,并且可以接受非对象参数并返回值。这不能将C数组或联合作为参数或返回类型。

     

protocol - 声明选择器的协议。如果选择器尚未在接收器上实现,则将用于类型信息。这不能为NULL,并且选择器必须存在于此协议中。

我尝试过发送DelegateType.self,最后收到此错误:

  

无法找到接受提供的参数的rac_signalForSelector的重载

1 个答案:

答案 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的想法是最好的办法。