我在类中创建一个手势识别器属性,并将@objc函数作为参数传递。
private let tapGestureRecognizer =
UITapGestureRecognizer(
target: self,
action: #selector(toggleTapped))
@objc private func toggleTapped() {
//some actions
}
但是,触发手势识别器后,不会调用toggleTapped()函数。
仅当我将属性声明更改为lazy var
时,一切似乎才能正常工作。
为什么编译器没有告诉我我的错误?这是编译器错误还是我缺少什么?谢谢。
答案 0 :(得分:0)
因为let
变量在运行self/super.init
之前被赋予了一个值,这意味着self
尚不存在。在需要时为lazy
变量赋值,并在init
之后给变量赋值,这意味着self
确实存在。您的手势引用了self
,因此它的创建需要推迟到self
实际上存在。