2017-04-10 12 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 
}() 

あなたが最初に見ることができるように」 let label = "ラベルを作成し、すべての初期化を行うことができます(テキストカラーのように)。最後にラベルを返して、レイジープロパティに割り当てます。

関連する問題