当为UILabel传递值时,出现错误:
源代码:不能展开可选。没有一个
@IBOutlet var rowLabel : UILabel
var row: String? {
didSet {
// Update the view.
println(row)
rowLabel.text = row
}
}
也错误出现在标签的模板为utable当我适当的新含义:<>之前让myCell: Cell = Cell(style: UITableViewCellStyle)。副标题,reuseIdentifier: "cell")myCell.myLabel.text = ';(indexPath.row) ';
row
是一个Optional
,也可以是nil
,也就是Optional.None
,所以你需要在赋值前打开它。
如果你不这样做,我猜运行时将尝试打开它,但无论何时遇到nil
值,它都会失败。
这样的东西应该是安全的
if let r = row {
rowLabel.text = r
}
如果row
是nil
,它将永远不会被分配。
必须在willSet块中使用newValue,在didSet块中使用oldValue
的例子:
class foo {
var row: String? {
willSet {
println("will set value:")
println(newValue)
}
didSet {
println("did change value:")
println(oldValue)
}
}
}
var bar = foo()
println("First time setter called")
bar.row = "First value"
println("Second time setter called")
bar.row = "Second value"
输出:
First time setter called
will set value:
First value
did change value:
nil
Second time setter called
will set value:
Second value
did change value:
First value