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