在swift中不能展开Optional.None错误
当UILabel的值被传递时,错误出现:
不能打开Optional.None
源代码:
@IBOutlet var rowLabel:UILabel
var row:String? { didSet { //更新视图 的println(行) rowLabel.text = row } }
当我适用新的含义时,UITable的模板中的标签中也出现错误:
let myCell:Cell = Cell(style:UITableViewCellStyle.Subtitle,reuseIdentifier:“cell”) myCell.myLabel.text =“(indexPath.row)”
您必须在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
row
是一个Optional
,它可以nil
,即可Optional.None
。 nil
,所以你需要在分配之前解开它。
如果你不这样做,我想运行时会试图解开它,但是只要遇到一个nil
值就会失败。
像这样的东西应该是安全的
if let r = row { rowLabel.text = r }
如果row
是nil
,它将永远不会被分配。