Почему этот быстрый код работает, когда для newValue ничего не назначено?

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)"
    }
}

}

Это часть кода, используемого в последнем курсе Standford IOS 8 с использованием swift для создания калькулятора (адрес Youtube: https://www.youtube.com/watch?v=QLJtT7eSykg)

Каждый раз, когда я вызываю enter() (нажимаю Enter), в стеке должен сохраняться новый номер. Например: "8, введите()" --> {8}, "16, введите()" --> {8,16}.

Я запутался в вычисляемом свойстве displayValue. Для "newValue" ничего не назначено. Если есть что-то вроде «displayValue = 8», то я знаю, что «newValue» равно 8, и все это имеет смысл. Но такого нет.

Почему он все еще работает?

(Я имею в виду не само имя «newValue», я знаю, что Swift использует его по умолчанию, вместо этого меня смущает отсутствие присвоенного значения)


person den330    schedule 10.07.2015    source источник


Ответы (1)


«newValue» — это неявно определенная переменная в swift. То, что он делает, — это очень аккуратный способ позволить метке отображать значения двойного «displayValue». Каждый раз, когда displayValue изменяется, метка автоматически обновляется новейшим (двойным) значением. Или когда вы пишете: displayValue = 45.0, метка также будет показывать это значение. Очень удобно, когда вам постоянно нужно обновлять текстовое поле или метки данными, которые вы получаете из баз данных, остальных интерфейсов и т. д. Что делает «newValue», так это берет последнее значение «setter», содержащее это.

person Lars Christoffersen    schedule 11.07.2015