首页 文章

@protocol(DelegateType)的Swift等价物

提问于
浏览
7

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

rac_signalForSelector(selector: Selector, fromProtocol: Protocol?)

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

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

EDIT: Adding method documentation and best attempt

该方法的文档如下:

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

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

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

1 回答

  • 4

    你宣布你的协议时使用了 @objc 吗?

    我相信 SomeProtocol.self 是通过它的正确方法但是因为你将它传递给obj-c API它需要以 @objc 为前缀,如this example from the docs

    @objc protocol HasArea {
        var area: Double { get }
    }
    

    Edit :原来所讨论的协议来自一个库(用objective-c编写,所以已经与objective-c兼容),没有在Swift中定义 .

    在这种情况下,它可能是一个编译器错误,所以在你做任何事情之前 make sure you're using the latest version of Xcode (写作时的beta 3) .

    如果没有't work out, I think Tommy'的想法使用 NSProtocolFromString 是最好的办法,直到修复编译器错误 .

相关问题