我需要为任何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
的初始化程序。我认为这可能是不可能的,但也许有一些方法可以实现这一目标。
此类初始化程序已存在于标准库中:
let a: Double = Double(3.625)
//From Double to Float and Float80
let b: Float = Float(a)
let c: Float80 = Float80(a)
//From Float to Double and Float80
let d: Double = Double(b)
let e: Float80 = Float80(b)
//From Float80 to Double and Float
let f: Double = Double(c)
let g: Float = Float(c)
你可以找到正确的here:
public init<Source : BinaryFloatingPoint>(_ value: Source) {
self = Self._convert(from: value).value
}