遅延初期化を使用しているときに、この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がnilであることを示した、とbarButtonItem2.targetはクレイジーと思われる自己、でした! barButtonItem1の遅延書き込みを使用したときにこの問題が発生し、barButtonItem1のアクションを呼び出すことができないことが判明し、最後に問題はbarButtonItem1.targetがnilだったことです。
私はこれがなぜ起こるのかわかりませんが、これはバグだとはっきりしています。 これについて誰かが知っていますか?あなたがそれについて説明できるなら、本当に感謝します。
私はあなたが正しく 'barButtonItem1'をやっているとは思いません。最初の 'lazy var'はデータ型で宣言しなければなりません。次に、通常のvarのように値を設定するだけです。お読みください:https://www.hackingwithswift。com/example-code/language/what-are-lazy-variables – thedp
barButtonItem1の宣言は、[link](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