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 - 改用 WillSet 和 DidSet 有意义吗?
为什么使用Getter和Setter?Getter和Setter有什么区别?
未定义符号:Swift.String.unicodeScalars.getter:XCode 13 中的 Swift.String.UnicodeScalarView