참고 :이 문제는 Xcode 8 & Swift 3.1에 있습니다. Xcode 9 & 스위프트 4는 정상적으로 작동합니다.자체 변수가있는 지연 속성 init
저는 게으른 변수가있는 간단한보기 컨트롤러가 있습니다. 스토리 보드에서 인스턴스화되었습니다. 여기 코드는 다음과 같습니다
import UIKit
final class ChildViewController: UIViewController {
private lazy var barButton = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItems = [barButton]
}
func addBookmark() {
print("Bookmark Added")
}
}
문제 barButton
변수는 viewDidAppear(_:)
호출하지만, 직접 init(withCoder:)
호출 후 초기화되지 않는 것입니다. 현재 자기 변수는 nil
입니다. 나는 내 수업을 시도했고 그 결과는 같았다.
하지만이 같은 게으른 VAR를 선언 할 때 모든 것이 제대로 작동 :
private lazy var barButton: UIBarButtonItem = {
UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))
}()
왜 게으른 변수는 다음과 같이 초기화한다`
당신은 example project을 시도 할 수 있습니다.
엑스 코드를 작성하려고? 내가 뭐 놓친 거 없니? –
죄송합니다. 지금 수정되었습니다. – Deny