@protocol(DelegateType)的Swift等价物

Sha*_*e N 7 xcode objective-c ios swift

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

rac_signalForSelector(selector: Selector, fromProtocol: Protocol?)

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

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

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

该方法的文档如下:

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

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

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

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

Jia*_*aro 4

@objc你声明协议时使用过吗?

我相信SomeProtocol.self这是传递它的正确方法,但由于您将其传递到 obj-c API,因此需要使用@objc文档中的示例这样的前缀:

@objc protocol HasArea {
    var area: Double { get }
}
Run Code Online (Sandbox Code Playgroud)

编辑:原来有问题的协议来自一个库(用 Objective-C 编写,因此已经与 Objective-C 兼容),而不是在 Swift 中定义。

既然如此,这可能是一个编译器错误,因此在执行其他操作之前,请确保您使用的是最新版本的 Xcode(在撰写本文时为 beta 3)。

如果这不起作用,我认为NSProtocolFromString在修复编译器错误之前,使用 Tommy 的想法是最好的办法。