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
在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