我想在Swift中创建一个弱引用指向自己,就像我们在Objective-C中使用的方式一样。
__weak Something *weakself = self;
我发现有人解释如何在代码块内使用“弱引用”。
{ in [unowned self] ...}
但我不想在我的代码块内定义 'weakself',我希望在代码块外部定义 weakself。
只需使用weak
关键字定义弱引用:
weak var weakSelf = self
根据文档:
通过在属性或变量声明之前放置
weak
关键字,表示一个弱引用。
...
注意:必须将弱引用声明为变量,以表示它们的值可以在运行时更改。不能将弱引用声明为常量。
我觉得你试图避免在块中出现保留循环,就像在Objective-C中一样,你不是引用self,而是创建一个弱版本:
__weak MyType *weakSelf = self;
void (^aBlock)() = ^void()
{
[weakSelf doStuff];
}
lazy var someClosure: (Int, String) -> String =
{
[unowned self, weak delegate = self.delegate!]
(index: Int, stringToProcess: String) -> String in
// closure body goes here
}
摘自:苹果公司。“Swift编程语言(Swift 2)。” iBooks。https://itun.es/us/jEUH0.l
weak var delegate: MyProtocol!
或其他)。 - Robself
不存在,那么在一个对象的方法中运行代码的情况是什么上下文呢?你需要一个对象来运行方法。 - rickster