在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.Nonenil ,所以你需要在分配之前解开它。

如果你不这样做,我想运行时会试图解开它,但是只要遇到一个nil值就会失败。

像这样的东西应该是安全的

 if let r = row { rowLabel.text = r } 

如果rownil ,它将永远不会被分配。