无法解包 Optional.Faster 中的 None 错误



当为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    
}

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

必须在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

最新更新