我搜索了Swift Spec在Inner Func上的捕获列表,但没有运气,有什么方法可以打破这些参考周期?
class Hello {
var name = "name"
var fn: (()->())? = nil
}
func foo() -> Hello? {
var bar: Hello? = Hello()
func wrapper() -> () -> () {
func inner() {
print("bar: (bar)")
}
return inner
}
bar?.fn = wrapper()
return bar
}
var s = foo()
var b = Hello()
isKnownUniquelyReferenced(&s) // false
isKnownUniquelyReferenced(&b) // true
要使用捕获列表,您必须使用匿名函数(许多人错误地称为"闭合")。因此,您会重写
func inner() {
print("bar: (bar)")
}
AS
let inner : () -> () = { [weak bar] in
print("bar: (bar)")
}