Tôi đã tìm thấy vấn đề đích UIBarButtonItem này một cách vô ý thức khi sử dụng khởi tạo var lười biếng.iOS lazy var UIBarButtonItem target issue
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)
}
}
Kết quả in cho thấy rằng barButtonItem1.target là nil và barButtonItem2.target là tự, điều này có vẻ điên rồ! Tôi nhận được vấn đề này khi tôi sử dụng văn bản lười biếng var barButtonItem1, và sau đó tôi thấy rằng hành động của barButtonItem1 không bao giờ có thể được gọi, và cuối cùng vấn đề là barButtonItem1.target là nil.
Tôi không biết tại sao điều này xảy ra, tuy nhiên tôi chắc chắn đây là lỗi. Có ai biết gì về điều này không? Tôi sẽ thực sự đánh giá cao nếu bạn có thể giải thích về nó.
Tôi không nghĩ rằng bạn đang làm 'barButtonItem1' một cách chính xác. Đầu tiên 'lazy var' phải được khai báo với kiểu dữ liệu. Thứ hai, bạn chỉ cần thiết lập giá trị của nó giống như một var thông thường. Vui lòng đọc: https: //www.hackingwithswift.com/example-code/language/what-are-lazy-variables – thedp
Tuyên bố của barButtonItem1 phải chính xác, theo [link] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language /Properties.html). – user5685969
Theo [link] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html), khai báo của barButtonItem1 phải chính xác. Tuy nhiên tôi đã thử những gì bạn nói để thêm một khai báo kiểu dữ liệu cho barButtonItem1, và nó hoạt động tốt ngay bây giờ. Tôi vẫn không biết điều gì gây ra điều này. – user5685969