Swift 非托管对象和协议

Swift 非托管对象和协议,swift,swift-protocols,Swift,Swift Protocols,尝试将非托管对象与swift协议一起使用时遇到以下错误 “非托管”要求“MyProtocol”是类类型 协议MyProtocol:类{} 类MyController:MyProtocol{} func测试(){ let listController:MyProtocol=MyController() 设p=Unmanaged.from不透明(listController).takeUnrepainedVlue() // ^^^^^^^^^ } 更新: 如果可以确保协议始终是某个

尝试将非托管对象与swift协议一起使用时遇到以下错误

“非托管”要求“MyProtocol”是类类型

协议MyProtocol:类{}
类MyController:MyProtocol{}
func测试(){
let listController:MyProtocol=MyController()
设p=Unmanaged.from不透明(listController).takeUnrepainedVlue()
//          ^^^^^^^^^
}

更新

如果可以确保协议始终是某个类对象,则可以使用显式类型对话:

//获取指向委托对象的不安全指针
让委托:MyProtocol=某个\u对象
让my_unsafe_pointer=Unmanaged.passUnretained(委托为AnyObject).toOpaque()
//从不安全指针获取委托
让委托=非托管


或者,您可以在协议定义之前添加
@objc
,使其与Objective-C兼容。然后,您的协议将像对象一样工作。

更新

如果可以确保协议始终是某个类对象,则可以使用显式类型对话:

//获取指向委托对象的不安全指针
让委托:MyProtocol=某个\u对象
让my_unsafe_pointer=Unmanaged.passUnretained(委托为AnyObject).toOpaque()
//从不安全指针获取委托
让委托=非托管

或者,您可以在协议定义之前添加
@objc
,使其与Objective-C兼容。然后,您的协议将像对象一样工作

protocol MyProtocol:class {}
class MyController: MyProtocol {}
func test() {
    let listController : MyProtocol = MyController()
    let p = Unmanaged<MyProtocol>.fromOpaque(listController).takeUnretainedVlue()
//          ^^^^^^^^^
}