Swift 代表。

Swift delegate.

在Objective-C我可以做这样的事情:

@property (nonatomic, weak) id<SomeCustomProtocol> someObject;

如何在 swift 中制作这个? 我试过这个:

let someObject: AnyObject, SomeCustomProtocol = ....;

而且它不起作用。

let someObject:SomeCustomProtocol = ....;

应该是这样的:

 var delegate: SomeCustomProtocol?

here

中找到更多指导

在Swift中声明委托的正确方法是:

weak var delegate: SomeCustomDelegate?

Swift 使用 ARC 进行内存管理,因此它仍然容易受到保留周期的影响。

阅读 good reference 以了解更多信息。

创建委托时要考虑的一些事项 属性 是:

  • 使用 weak 关键字避免循环引用
  • 将属性设置为协议的可选类型

例如:

//Protocol
protocol SomeProtocolDelegate: class {
func doSomething()
}

weak var delegate: SomeProtocolDelegate?

这里有一个更完整且非常有用的实现。

https://medium.com/compileswift/implementing-delegates-in-swift-step-by-step-d3211cbac3ef#.vvdx9admt