2017-12-01 4 views
0

참고 :이 문제는 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을 시도 할 수 있습니다.

+4

엑스 코드를 작성하려고? 내가 뭐 놓친 거 없니? –

+0

죄송합니다. 지금 수정되었습니다. – Deny

답변

0

나는 그것을 실행할 수 없습니다,하지만 난이 작동합니다 생각 ** 10 **

private lazy var barButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark)) 
+0

이것은 내 것과 같은 표현이며 아무런 차이가 없습니다. – Deny

관련 문제