2017-04-10 49 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

懶惰存儲屬性是一個屬性,它的初始值未 計算使用它的第一次直到。您通過在其聲明之前編寫lazy修飾符來指示惰性存儲的 屬性。

樣品片段 - 斯威夫特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 
}() 

正如你所看到的第一個「讓label =「創建標籤,然後可以執行所有初始化(如textcolor),最後我們返回標籤,將其分配給lazy屬性。