问题出在标题中。在Objective-C中,如果我想拥有 HAS 的属性(如委托)以遵守某个协议,则可以这样定义:
@property (weak) id<MyDelegate> delegate;
如何在Swift中执行此操作?
答案 0 :(得分:19)
协议是一种类型,因此您可以将其用作声明的变量类型。要使用weak
,必须将类型包装为Optional。所以你会说:
weak var delegate : MyDelegate?
但为了使其工作,MyDelegate必须是@objc
或class
协议,以保证采用者是一个类(不是结构或枚举,因为它们不能是{ {1}})。
答案 1 :(得分:1)
我认为确切的对话是:
weak var delegate: protocol<MyDelegate>?
我比swift语法更喜欢这种古老的objc风格,因为在swift中首先是基类,然后是所有采用的协议。如果您的协议没有&#34;委托&#34;这可能会造成混淆。后缀,因为你不知道DataAdoption(例如)是超类还是协议。
答案 2 :(得分:0)
像类型一样使用协议,所以:
weak var delegate:MyDelegate?
答案 3 :(得分:0)
最好知道Swift中方法声明中的Objective-C id<MyProtocolName>
的等价物是protocol<MyProtocolName>
。例如:
// Objective-C
-void myMethodWithSome:(id <MyProtocolName>)param {
// ...
}
// Swift
func myMethodWithSome(param: protocol<MyProtocolName>) {
//...
}