FloatingPoint扩展 - 使用其他FloatingPoint类型的init

问题描述 投票:0回答:1

我需要为任何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的初始化程序。我认为这可能是不可能的,但也许有一些方法可以实现这一目标。

swift generics type-conversion
1个回答
1
投票

此类初始化程序已存在于标准库中:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.