当newValue没有分配给它时,为什么这个快速代码有效?

时间:2015-07-10 20:48:52

标签: ios swift oop computed-properties

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var display: UILabel!

var inMid = false

@IBAction func appendDigit(sender: UIButton) {
    let digit = sender.currentTitle!
    if inMid{
        display.text = display.text! + digit
    }else{
        display.text = digit
        inMid = true
    }
}


var operandStack = Array<Double>()
@IBAction func enter() {
    inMid = false
    operandStack.append(displayValue)
    println("operandStack = \(operandStack)")
}


var displayValue:Double{
    get {
        return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
    }
    set{
        display.text = "\(newValue)"
    }
}

}

这是使用swift构建计算器的最新Standford IOS 8课程中使用的代码部分(Youtube地址:https://www.youtube.com/watch?v=QLJtT7eSykg

每当我调用enter()(按回车键)时,新的数字应该保存在堆栈中。例如:&#34; 8,输入()&#34; - &GT; {8},&#34; 16,输入()&#34; - &GT; {8,16}。

我对计算属性&#34; displayValue&#34;感到困惑。这里。没有任何内容分配给&#34; newValue&#34;。如果有&#34; displayValue = 8&#34;,那么我知道&#34; newValue&#34;是8,这一切都有道理。但是没有这样的事情。

为什么还能运作?

(我的意思不是名称&#34; newValue&#34;本身,我知道它是Swift的默认设置,相反,缺少指定值会让我感到困惑)

1 个答案:

答案 0 :(得分:0)

&#34; NEWVALUE&#34;是swift中隐式定义的变量。 他所做的是一种非常巧妙的方式,让标签显示双重&#34; displayValue&#34;的价值。每次更改displayValue时,标签都会自动更新为最新(double)值。 或者当你写:displayValue = 45.0时,标签也会显示这个值。当您经常需要使用从数据库,休息接口等获得的数据更新文本字段或标签时非常方便。&#34; newValue&#34;确实是最后一个&#34; setter&#34;持有这个价值。