gpt4 book ai didi

swift - 为什么闭包中的 self 不引用所属的类实例?

转载 作者:行者123 更新时间:2023-11-28 12:17:00 27 4
gpt4 key购买 nike

在下面的代码中,print 语句输出“C2”,这是创建闭包的类,作为初始参数传递给 C1。

class C1 {
let closure: () -> Void
init(closure: @escaping () -> Void) {
self.closure = closure
}
}

class C2 {
func test() {
let c1 = C1(closure: { [unowned self] in
// I would expect "self" to be the C1 instance
print(type(of:self))
})
c1.closure()
}
}
C2().test()

我原以为“self”是 C1 实例。为什么不是这样?

最佳答案

考虑一下如果您这样编写代码,您的期望是什么:

class C2 {
func test() {
let closure = { [unowned self] in
print(type(of:self))
})
let c1 = C1(closure: closure)
c1.closure()
}
}

他们本质上是在做同样的事情,但是你的版本只是把它压缩成一行。但是您仍在 C2 类型的 test() 方法范围内创建闭包参数。即使您在一行中输入,闭包参数仍必须完全创建并存在于 test() 方法的范围内 before C1 用它实例化.

关于swift - 为什么闭包中的 self 不引用所属的类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46147694/

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