是否有任何变通方法来指定内部函数捕获列表及其在 swift 中的修饰符
are there any workaround to specify inner func capture list & their modifier in swift
我在 swift 规范中搜索了内部函数的捕获列表,但没有成功,
有什么办法可以打破这种引用循环吗?
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
要使用捕获列表,您必须使用匿名函数(很多人错误地称之为 "closure")。所以,你会重写你的
func inner() {
print("bar: \(bar)")
}
作为
let inner : () -> () = { [weak bar] in
print("bar: \(bar)")
}
我在 swift 规范中搜索了内部函数的捕获列表,但没有成功, 有什么办法可以打破这种引用循环吗?
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
要使用捕获列表,您必须使用匿名函数(很多人错误地称之为 "closure")。所以,你会重写你的
func inner() {
print("bar: \(bar)")
}
作为
let inner : () -> () = { [weak bar] in
print("bar: \(bar)")
}