gpt4 book ai didi

ios - 如果属性不是惰性变量(并且编译器没有告诉我这一点),为什么 #selector 函数不起作用?

转载 作者:行者123 更新时间:2023-11-29 05:42:04 25 4
gpt4 key购买 nike

我在类中创建了一个手势识别器属性,并将 @objc 函数作为参数传递。

private let tapGestureRecognizer =
UITapGestureRecognizer(
target: self,
action: #selector(toggleTapped))

@objc private func toggleTapped() {
//some actions
}

但是,手势识别器被触发后,toggleTapped() 函数不会被调用。仅当我将属性声明更改为 lazy var 时,一切似乎都能正常工作。

为什么编译器不告诉我我的错误?这是编译器错误还是我遗漏了什么?谢谢。

最佳答案

因为 let 变量在 self/super.init 运行之前被赋予了值,这意味着 self 还不存在。 lazy 变量在需要时被赋予一个值,并且在 init 之后,这意味着 self 确实存在。您的手势引用了 self,因此需要推迟其创建,直到 self 实际存在。

关于ios - 如果属性不是惰性变量(并且编译器没有告诉我这一点),为什么 #selector 函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56465458/

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