0
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() を呼び出す (Enter キーを押す) たびに、新しい番号がスタックに保存されるはずです。例: "8, enter()" --> {8}, "16, enter()" --> {8,16}.

ここで計算されたプロパティ「displayValue」について混乱しました。「newValue」には何も割り当てられていません。「displayValue = 8」のようなものがある場合、「newValue」が 8 であることがわかり、すべて意味があります。しかし、そんなことはありません。

なぜまだ機能するのですか?

(私が意味するのは、「newValue」という名前自体ではありません。Swift のデフォルト設定であることはわかっています。代わりに、割り当てられた値の欠落が私を混乱させるものです)

4

1 に答える 1

0

「newValue」は、swift で暗黙的に定義された変数です。彼がしていることは、ラベルに double の「displayValue」の値を表示させる非常に巧妙な方法です。displayValue が変更されるたびに、ラベルは最新の (double) 値で自動的に更新されます。または、displayValue = 45.0 と記述すると、ラベルにもこの値が表示されます。データベースや残りのインターフェースなどから取得したデータでテキストフィールドやラベルを常に更新する必要がある場合に非常に便利です。

于 2015-07-11T20:46:06.313 に答える