【发布时间】:2015-07-03 16:03:23
【问题描述】:
我目前已经制作了一个包含一堆冗余初始化器的协议
public protocol ConvertibleUnit {
///The raw value in `self` unit type
var value : Double { get set }
///The value in base units (i.e. for distance this would be `Meters`
var valueInBaseUnits : Double { get set }
///Do not interact with this directly
var data : UnitValueData { get set}
init(_ v : Double)
init(_ v : Float)
init(_ v : Int)
var unitType : ConversionEnum {get}
}
基本上我希望做一个协议扩展并定义Float和Int的默认版本
我尝试了一些类似于:
extension ConvertibleUnit {
init(_ v : Float) {
init(Double(v) )
}
init(_ v : Int) {
Self(Double(v))
}
}
这让我想知道是否有一个通用协议,例如 IntegerLiteralConvertible,我可以使用它来调用初始化程序,但这似乎也不起作用。
基本上有办法制作(我猜是通用的?)初始化程序,它接受任何可以转换为双精度的东西,然后执行通用初始化。
init<T : ANYTHING_THAT_CAN_BE_CONVERTED_TO_DOUBLE>(_ v : T) {
let d : Double = Double(T)
// Do stuff to init
}
更新
- 尝试使用 Self.init(Double(v))
【问题讨论】: