无法将类型“ AProtocol”的值转换为协议。

时间:2018-09-29 12:32:28

标签: swift macos swift-protocols

我正在尝试为NSXPCInterface建立协议,但遇到了一个奇怪的问题。

我创建了一个协议:

public protocol AProtocol {

    //functions in here

}

,当我要将其添加到NSXPCConnection的exportedInterface时,

let newConnection: NSXPCConnection
newConnection.exportedInterface = NSXPCInterface(with: AProtocol.self)

我收到这个奇怪的错误:

Cannot convert value of type 'AProtocol.Protocol' to expected argument type 'Protocol'

2 个答案:

答案 0 :(得分:1)

我不知道原因,但可以尝试此操作。在@objc之前添加protocol

 @objc public protocol AProtocol {

//functions in here

}

不要忘记初始化NSXPCConnection

修改:从here

中找到了原因

“ @ objc”将协议公开给目标c运行时,并允许我们传递任何“协议类型”作为参数

答案 1 :(得分:0)

您传递给NSXPCInterface实例的协议必须是documentation中所述的Objective-C协议:

  

协议:此接口基于的Objective-C协议。

因此,您要做的就是在AProtocol上标记@objc

@objc public protocol AProtocol {
}