当我将目标添加到控制器中的 UIButton 时,为什么会收到此警告? (警告和代码如下所述)
Why am I getting this warning when I add the target to my UIButton in my controller? (the warning and code is stated below)
我正在以编程方式创建一个按钮,当我向其中添加“button.addTarget”代码行时,我创建的每个按钮都会收到此警告。代码如下:
let logoutButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Log Out", for: .normal)
button.setWidth(width: 100)
button.setHeight(height: 30)
button.layer.cornerRadius = 15
button.backgroundColor = .white
button.setTitleColor(.red, for: .normal)
button.addTarget(self, action: #selector(handleLogOut), for: .touchUpInside)
return button
}()
我收到的警告是:
'self'指的是方法'HomeController.self',可能出乎意料
它还附带了一个修复程序,即:
使用 'HomeController' 关闭此警告
然而,当我实施此修复时,“button.addTarget”行第一个参数中的“self”变为“HomeController.self”并导致应用程序崩溃。
我过去常常为此使用“self”,直到最近它才发出警告。现在它每次都会对此发出警告。当我使用“self”时,它仍然可以正常工作,但是 Xcode 中的警告很烦人......感谢任何帮助。
使用 lazy var 而不是 let 它将解决问题或在 viewDidLoad 中设置目标。
您正在创建一个变量并将闭包的结果分配给该变量。该闭包的代码在 class 的任何实例存在之前执行(在有 self
可以引用之前。)
Self 在代码运行时不存在。
正如 Abhishek 在他们的回答(投票)中所建议的那样,如果您将声明切换为惰性变量,则惰性变量会在第一次被引用时创建。 self
在计算惰性变量的值时存在。
我正在以编程方式创建一个按钮,当我向其中添加“button.addTarget”代码行时,我创建的每个按钮都会收到此警告。代码如下:
let logoutButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Log Out", for: .normal)
button.setWidth(width: 100)
button.setHeight(height: 30)
button.layer.cornerRadius = 15
button.backgroundColor = .white
button.setTitleColor(.red, for: .normal)
button.addTarget(self, action: #selector(handleLogOut), for: .touchUpInside)
return button
}()
我收到的警告是: 'self'指的是方法'HomeController.self',可能出乎意料
它还附带了一个修复程序,即: 使用 'HomeController' 关闭此警告
然而,当我实施此修复时,“button.addTarget”行第一个参数中的“self”变为“HomeController.self”并导致应用程序崩溃。
我过去常常为此使用“self”,直到最近它才发出警告。现在它每次都会对此发出警告。当我使用“self”时,它仍然可以正常工作,但是 Xcode 中的警告很烦人......感谢任何帮助。
使用 lazy var 而不是 let 它将解决问题或在 viewDidLoad 中设置目标。
您正在创建一个变量并将闭包的结果分配给该变量。该闭包的代码在 class 的任何实例存在之前执行(在有 self
可以引用之前。)
Self 在代码运行时不存在。
正如 Abhishek 在他们的回答(投票)中所建议的那样,如果您将声明切换为惰性变量,则惰性变量会在第一次被引用时创建。 self
在计算惰性变量的值时存在。