gpt4 book ai didi

swift - 是否有任何变通方法可以在 swift 中指定内部函数捕获列表及其修饰符

转载 作者:搜寻专家 更新时间:2023-11-01 06:54:06 24 4
gpt4 key购买 nike

我在 swift 规范中搜索了 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)")
}

作为

    let inner : () -> () = { [weak bar] in
print("bar: \(bar)")
}

关于swift - 是否有任何变通方法可以在 swift 中指定内部函数捕获列表及其修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54924463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com