【发布时间】:2018-09-07 19:59:13
【问题描述】:
我需要为任何FloatingPoint 值编写一个初始化器,它可以采用其他类型的FloatingPoint,并将其转换为Self。这在swift 中可行吗?我尝试过这样的事情:
init<FloatingPointType: FloatingPoint>(_ value: FloatingPointType) {
guard let sameValue = value as? Self else {
// Pass throu double to get best precision
self.init(Double(value))
return
}
self = sameValue // The same type
}
但这只会造成无限循环。问题在于创建新的自我,没有初始化器可以接受任何其他FloatingPoint。我认为这可能是不可能的,但也许有一些方法可以实现这一点。
【问题讨论】:
-
您的意思是要将任何 Float、Double 和 Float80 转换为 Float?
-
我需要一个函数或初始化程序,它允许我将任何 FloatingPoint(如 Float、Double 等)转换为任何其他 FloatingPoint 类型。我需要这是通用的。所以例如我可以这样做: let a = Double(3);让 b = Float(a)
-
"获得最佳精度" -> Float80。 Double 仅适用于 64。浮动在 32 上。
-
let a = Double(3); let b = Float(a)已经可以了! -
你的问题没有任何意义。看起来您很难扩展
FloatingPoint协议以尝试返回FloatingPoint对象。你不能。您需要返回Self,它可以是任何符合FloatingPoint协议的类型,例如Double、Float、Float80
标签: swift generics type-conversion