println可以与set一起使用,为什么?

时间:2015-12-17 08:19:10

标签: swift

我想知道计算的get和set属性的执行过程。

我的代码在这里:

var operandstack = Array<Double>()
@IBAction func enter()
    {
        println("FUNCTION enter")
        typingNew = false
        operandstack.append(displayvalue)
        println("\(operandstack)")

    }
var displayvalue : Double {
    get { 
        println("get value==\(display.text)") 
        return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
    } 
    set { 
        println("set vaslue== \(newValue)") 
        display.text="\(newValue)"
        typingNew=false
    }
}

println适用于get方法而不是set,我还需要知道哪些首先执行。

我正在使用Swift 1.2,Xcode 6.4

enter image description here

3 个答案:

答案 0 :(得分:2)

如果要访问displayvalue的值,则调用get部分,而在更改displayvalue中的值时将调用set部分。

var x = displayvalue // get will be called --> print(get value== ..)
displayvalue = 2.0   // set will be called --> print(set vaslue== 2.0)

答案 1 :(得分:2)

使用此代码:

var operandstack = Array<Double>()
@IBAction func enter()
    {
        println("FUNCTION enter")
        typingNew = false
        operandstack.append(displayvalue)
        println("\(operandstack)")

    }
var displayvalue : Double {
    get { 
        println("get value==\(display.text)") 
        return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
    } 
    set { 
        println("set vaslue== \(newValue)") 
        display.text="\(newValue)"
        typingNew=false
    }
}

从不使用setter。尝试为DisplayText分配一个值,然后您就会看到该字符。

例如:

var operandstack = Array<Double>()
@IBAction func enter()
    {
        println("FUNCTION enter")
        typingNew = false
        displayvalue = 2.0 // <-- Here you use the setter
        operandstack.append(displayvalue)
        println("\(operandstack)")

    }

顺便说一下,代码operandstack.append(displayvalue)会调用getter,因为您希望获取 displayvalue的值,并将其放入operandstack

答案 2 :(得分:0)

要调用get方法,必须为计算属性displayvalue指定一个新值。这是调用get方法的唯一机会。

关于你的第二个问题,这取决于你是先获得财产还是首先为其分配新价值。