是否有任何解决方法可以在 swift 中指定内部 func 捕获列表及其修饰符



我搜索了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)")
    }

相关内容

  • 没有找到相关文章

最新更新