게으른 var 초기화를 사용할 때이 UIBarButtonItem 대상 문제가 무의식적으로 발견되었습니다.iOS 게으른 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의 게으른 var 쓰기를 사용할 때이 문제가 발생하고 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