Swift相当于id <myprotocol>?

时间:2015-05-18 17:03:38

标签: objective-c swift delegates protocols

问题出在标题中。在Objective-C中,如果我想拥有 HAS 的属性(如委托)以遵守某个协议,则可以这样定义:

@property (weak) id<MyDelegate> delegate;

如何在Swift中执行此操作?

4 个答案:

答案 0 :(得分:19)

协议是一种类型,因此您可以将其用作声明的变量类型。要使用weak,必须将类型包装为Optional。所以你会说:

weak var delegate : MyDelegate?

但为了使其工作,MyDelegate必须是@objcclass协议,以保证采用者是一个类(不是结构或枚举,因为它们不能是{ {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>) {
   //...
}