gpt4 book ai didi

swift - Swift 中所有 IntegerLiteralConvertible 的通用 init 函数

转载 作者:行者123 更新时间:2023-11-30 10:14:03 25 4
gpt4 key购买 nike

我目前已经制定了一个具有一堆冗余初始化程序的协议(protocol)

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}
}

基本上,我希望进行协议(protocol)扩展并定义 FloatInt 的默认版本

我尝试了一些类似于以下的选项(均错误):

extension ConvertibleUnit {
init(_ v : Float) {
init(Double(v) )
}

init(_ v : Int) {
Self(Double(v))
}
}

这让我想知道是否有一个通用协议(protocol),例如 IntegerLiteralConvertible,我可以用它来调用初始化程序,但这似乎也不起作用。

基本上有没有一种方法可以制作(我猜是通用的?)初始化程序,它接受任何可以转换为 double 的东西,然后执行通用初始化。

init<T : ANYTHING_THAT_CAN_BE_CONVERTED_TO_DOUBLE>(_ v : T) {
let d : Double = Double(T)

// Do stuff to init
}

更新

  • 尝试使用 Self.init(Double(v))

enter image description here

最佳答案

调用初始化程序时需要使用self.init(...)(注意小写):

extension ConvertibleUnit {
init(_ v: Int) {
self.init(Double(v))
}

init(_ v: Float) {
self.init(Double(v))
}
}

关于swift - Swift 中所有 IntegerLiteralConvertible 的通用 init 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com