Swift 中的 Getter 和 Setter

Posted

技术标签:

【中文标题】Swift 中的 Getter 和 Setter【英文标题】:Getters and Setters in Swift 【发布时间】: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)"
    

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Swift 中的 Getter 和 Setter的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 Getter 和 Setter

Swift 中的 Getter 和 Setter - 改用 WillSet 和 DidSet 有意义吗?

为什么使用Getter和Setter?Getter和Setter有什么区别?

未定义符号:Swift.String.unicodeScalars.getter:XCode 13 中的 Swift.String.UnicodeScalarView

为啥 Swift 不像 Java 或 C# 那样对属性使用 getter 和 setter?

setter与getter访问器属性——数据驱动显示