【问题标题】:Getters and Setters in SwiftSwift 中的 Getter 和 Setter
【发布时间】:2015-08-05 00:14:27
【问题描述】:

为什么我们需要在 Swift 中的以下特定情况下使用 setter。

我正在尝试将“display.text”String 转换为 Double。我知道 getter 带回 String 值并将其转换为 Double 并将此值分配给变量 newValue

问题:如果我们刚刚将 display.text 值转换为 Double,为什么还要使用 = "\(newValue)" 将其设置回 String

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

【问题讨论】:

    标签: swift getter-setter computed-properties


    【解决方案1】:

    我了解 getter 带回 String 值并将其转换为 Double 并将该值分配给变量 newValue。

    这是不正确的。 getter 只返回双精度值。 getter 中没有newValue

    在 setter 中,newValue 是“setter 的隐含参数”的快捷方式。显式语法是这样的:

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

    【讨论】:

    • 谢谢,但为什么要将字符串“newValue”分配给 display.text?在我们将其转换为 Double 之前,Display.text 已经是一个 String
    • 因为这是二传手。当有人设置doubleValue 属性时,您希望发生什么?
    • 谢谢 Rob,你帮了大忙!
    【解决方案2】:

    为了覆盖 swift 变量的 setter 和 getter,请使用下面给出的代码

    var temX : Int? 
    var x: Int?{
    
    set(newX){
    
       temX = newX
    
    }
    
    get{
    
        return temX
    
    }
    

    我们需要将变量的值保存在一个临时变量中,因为尝试访问其 getter/setter 被覆盖的同一个变量将导致无限循环。

    我们可以像这样简单地调用setter

    x = 10
    

    Getter 将在给定代码行下方触发时调用

    var newVar = x
    

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 2011-10-05
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多