2017-04-10 10 views
0

self.numberLabel.textColor = UIColor.black의 주석을 풀면 빌드가 컴파일되지만 시뮬레이터에서 충돌합니다.`UILabel`에서`textColor`의 게으른 인스턴스화는 에러를 던집니다.

lazy public var numberLabel: UILabel = { 
     self.numberLabel.textColor = UIColor.black 
     return UILabel(frame: CGRect.init(x: 10, y: 40, width: self.bounds.size.width, height: 20)) 
    }() 

오류 상태 : "EXC_BAD_ACCESS".

+3

아직 작성되지 않은 텍스트 색상을 어떻게 설정할 수 있습니까? – rmaddy

답변

1

게으른 저장된 속성은 그 초기 값은 처음 사용할 때까지 계산되지 되는 속성이다. 선언하기 전에 지연 수정자를 작성하여 지연된 속성을 표시합니다.

샘플 조각 - 스위프트 3.x를

lazy public var numberLabel: UILabel = { 
    let label = UILabel(frame: CGRect(x: 20, y: 20, width: 200, height: 21)) 
    label.textColor = UIColor.black 
    return label 
}() 



override func viewDidLoad() { 
     super.viewDidLoad() 
     view.addSubview(numberLabel) 
     numberLabel.text = "Good" 
} 
1

당신이 그것을 설정하기 전에 당신은 numberLabel 언급하는이, 가장 좋은 방법은 다음과 같습니다 당신이 "첫 번째 볼 수 있듯이

lazy public var numberLabel: UILabel = { 
    let label = UILabel(frame: CGRect.init(x: 10, y: 40, width:  self.bounds.size.width, height: 20)) 
    label.textColor = UIColor.black 
    return label 
}() 

let label = "레이블을 만든 다음 모든 초기화 작업을 수행 할 수 있습니다 (예 : 텍스트 색상). 마지막으로 레이블을 반환하여 게으른 속성에 할당합니다.