使用SE-0269,我们将\xe2\x80\x99 在下面的情况下不再需要使用显式引用类型。
\nclass Test {\n var x = 0\n func execute(_ work: @escaping () -> Void) {\n work()\n }\n func method() {\n execute { [self] in\n x += 1\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这是否会处理[weak self]和[unowned self],或者我们应该在该提案中明确使用weak和unowned的情况。
\n您仍然需要手动指定weak和unowned捕获self. self.SE-0269 导致的唯一变化是,在确认您self使用 强烈捕获时,您不需要在访问实例属性/方法时显式写出[self]。
如果[weak self]你仍然需要显式地写self.在闭包中,但是在使用 时[unowned self],你可以self.像使用 时一样省略[self]。
execute { [weak self] in
x += 1 // Error: Reference to property 'x' in closure requires explicit use of 'self' to make capture semantics explicit
}
execute { [weak self] in
self?.x += 1 // need to manually specify `self?.`
}
execute { [unowned self] in
x += 1 // compiles fine
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |