18. Swift3.0 게으름 로드 및 initWithCoder 방법

1712 단어
UIlabel에서 상속된 DemoLabel을 사용자 정의합니다.모든 UIView 및 하위 클래스는 개발 중에 구조 함수를 다시 썼을 때, 순수한 코드와 XIB/SB 두 채널을 확보하기 위해 initWithCoder 함수를 실현해야 한다.여기서 fatalError() 방법은 XIB나 SB를 사용하고 이 코드를 쓰면 붕괴된다.
class DemoLabel: UILabel {
    //      
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    //initWithCoder    xib/SB   
    //  :  UIView       ,         ,     initWithCoder  ,       
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        //      ,   xib     ,  xib SB    
        //        XIB SB,         ,    
        fatalError()
        setupUI()
    }
    func setupUI() {
        print("    ")
    }
}


기본 쓰기 게으름.
 //        
    //1、     lazy
    //2、      :    、       
       //3、        
    lazy var label: DemoLabel = DemoLabel()


게을러짐에 대한 전체 쓰기 방법은 다음과 같습니다.
    //           
    //    ,          :           ,          
    lazy var label = {() -> DemoLabel in
       let l = DemoLabel()
        return l
    }()

Swift와 OC에서 게으름뱅이의 차이점: OC에서 게으름뱅이를 사용합니다. 게으름뱅이 만들기 대상을 처음 호출하면 중간에 다시 대상을nil로 설정하고 나중에 게으름뱅이 방법을 다시 호출합니다.Swift의 로딩 게으름: nil로 설정하려면 객체를 선택적으로 설정해야 합니다.또한 대상이 nil로 설정되면, 게으름뱅이는 다시 실행되지 않습니다.다시 말하면, 마운트 게으름은 첫 번째 호출할 때만 클립을 실행하고, 클립의 결과를 대상의 속성에 저장합니다.
    //   
    private lazy var label: UILabel? = UILabel()
    override func viewDidLoad() {
        super.viewDidLoad()
        label?.text = "sss"
        label?.sizeToFit()
        print(label)
        label = nil
        print(label)
    }

따라서 위에서 알 수 있듯이 Swift에서 보기나 공간을 주동적으로 청소하지 않도록 주의해야 한다. 왜냐하면 게으름을 피우면 다시 만들지 않기 때문이다.

좋은 웹페이지 즐겨찾기