我有许多几何函数只接受 0° 到 360° 范围内的角度。如果角度超出该范围,则该角度无效(即不能将 365° 转换为 5°),调用函数也没有意义。为此,我创建了以下类:
struct PositiveAngle {
public let value: Double
init?(value: Double) {
guard 0.0 <= value && value <= 360.0 else {
return nil
}
self.value = value
}
}
按如下方式使用:
let angle = PositiveAngle(value: 30.0)
print(angle.value)
func foo(angle: PositiveAngle) -> PositiveAngle {
...
}
这行得通,但感觉“笨拙”,因为每当我需要使用它时,我都会从结构中提取角度值。鉴于我所追求的只是一个范围受限的 Double
,是否有更有效的方法来实现这一目标?
最佳答案
如果您不想在每个函数中访问.value
,您将不得不自己添加辅助函数。
例如定义sin
:
func sin(_ angle: PositiveAngle) -> Double {
return sin(angle.value * Double.pi / 180)
}
现在您可以直接将 PositiveAngle
作为参数调用 sin
。
您可以对运算符执行相同的操作,例如+
, -
等
关于swift - 有效地包裹双,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43154612/