2
在Swift中,我有两个我想保持同步的结构的相关属性。Swift - 保持两个属性同步
我目前正在做这个与财产观察员,但我不得不添加一个额外的标志,以防止他们玩对方的乒乓无限游戏。
有没有更优雅和/或透明的方式来实现这一目标?
一个简单的例子:
import Foundation
struct Angle {
var blockPropertyObservers = false
var degrees: Double {
willSet(degrees) {
print("will set degrees to \(degrees)")
if !blockPropertyObservers {
blockPropertyObservers = true
radians = (degrees/360) * 2 * M_PI
} else {
blockPropertyObservers = false
}
}
}
var radians: Double {
willSet(radians) {
print("will set radians to \(radians)")
if !blockPropertyObservers {
blockPropertyObservers = true
degrees = (radians/(2 * M_PI)) * 360
} else {
blockPropertyObservers = false
}
}
}
init(inDegrees degrees: Double) {
self.degrees = degrees
self.radians = (degrees/360) * 2 * M_PI
}
init(inRadians radians: Double) {
self.radians = radians
self.degrees = (radians/(2 * M_PI)) * 360
}
}
理想的情况下,我也想找到一种方法,以避免复制在init()
程序的转换代码...
谢谢 - 是的,我最初有它这样的,但我真的希望在每次读取度数值时避免不必要的重新计算,因为在实际情况下,这是一项相当繁重的工作:( –
@MartinCR我更新了我的答案并提供了解决方案 – Cristik
啊 - 现在这是对我来说是新的语言的一个功能!+1给你:) –