简体   繁体   English

Swift中的Getter和Setters

[英]Getters and Setters in Swift

Why do we need to use setters in the particular case below in Swift. 为什么在以下Swift的特殊情况下我们需要使用setter。

I'm trying to convert 'display.text' String to Double . 我正在尝试将'display.text' String转换为Double I understand that getter brings back String value and converts it to Double and assigns this value to variable newValue . 我知道getter会带回String值并将其转换为Double并将此值分配给变量newValue

Question: why we set display.text value back into String again using = "\\(newValue)" if we just converted it into Double ? 问题:如果我们只是将display.text值转换为Double为什么还要使用= "\\(newValue)"将其重新设置为String呢?

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

I understand that getter brings back String value and converts it to Double and assigns this value to variable newValue. 我知道getter会带回String值并将其转换为Double并将此值分配给变量newValue。

This isn't correct. 这是不对的。 The getter just returns the double. 吸气剂仅返回双精度值。 There is no newValue in the getter. 吸气剂中没有newValue

In the setter, newValue is a shortcut for "the implied argument of the setter." 在setter中, newValue是“ setter的隐式参数”的快捷方式。 The explicit syntax is this: 显式语法是这样的:

var doubleValue: Double {
    ...
    set(newValue) {
        display.text = "\(newValue)"
    }
}

In order to override setter and getter for swift variables use the below given code 为了覆盖swift变量的setter和getter,请使用以下给定的代码

var temX : Int? 
var x: Int?{

set(newX){

   temX = newX

}

get{

    return temX

}

We need to keep the value of variable in a temporary variable, since trying to access the same variable whose getter/setter is being overridden will result in infinite loops. 我们需要将变量的值保留在一个临时变量中,因为尝试访问被getter / setter覆盖的同一变量将导致无限循环。

We can invoke the setter simply like this 我们可以像这样简单地调用设置器

x = 10

Getter will be invoked on firing below given line of code 在给定的代码行以下触发时将调用Getter

var newVar = x

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM