我在使用lazy var初始化時無意識地發現了這個UIBarButtonItem目標問題。iOS lazy var UIBarButtonItem目標問題
class ViewController: UIViewController {
lazy var barButtonItem1 = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(action1))
lazy var barButtonItem2: UIBarButtonItem = {
let barButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(action2))
return barButtonItem
}
override func viewDidLoad() {
super.viewDidLoad()
print(barButtonItem1.target, barButtonItem2.target)
}
}
打印的結果表明,barButtonItem1.target是零,而barButtonItem2.target是自我,這似乎是瘋了! 當我使用barButtonItem1的lazy var writing時遇到了這個問題,然後我發現barButtonItem1的操作永遠不會被調用,最後問題是barButtonItem1.target爲零。
我不知道爲什麼會發生這種情況,但我很確定這是一個錯誤。 有沒有人知道這件事?如果你能解釋它,我將非常感激。
我不認爲你正在做的'barButtonItem1'正確。首先'lazy var'必須用數據類型聲明。其次,你只是將它的值設置爲常規變量。請閱讀:https://www.hackingwithswift。COM /例子代碼/語言/什麼,是懶惰變量 – thedp
barButtonItem1的聲明應該是正確的,按[鏈接](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language /Properties.html)。 – user5685969
根據[link](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html),barButtonItem1的聲明應該是正確的。不過,我嘗試了你所說的爲barButtonItem1添加數據類型聲明,現在它表現良好。我仍然不知道是什麼原因造成的。 – user5685969