初始化BinaryFloatingPoint协议中的字符串



我不确定我是否走在正确的道路上,但我正在尝试创建一个BinaryFloatingPoint扩展,以扩展Float,Double。。。这个想法是在看到那个链接之后产生的。

到目前为止,我已经创建了不同的功能,并取得了一定程度的成功。然而,我很难用通用BinaryFloatingPoint初始化字符串。

为了解决这个问题,我附上了一些简单的示例代码来展示我想做的事情:

extension Numeric where Self: BinaryFloatingPoint {
var toString: String {
return String(self)
}

}

但我看到以下错误:

调用初始值设定项时没有完全匹配

这可能吗?

添加

其想法是将其与通用BinaryFloatingPoint类型一起使用

extension Numeric where Self: BinaryFloatingPoint {

/// Retruns the string value of the BinaryFloatingPoint
var toString: String {
return String(describing: self)
}

/// Returns the number of decimals. It will be always greater than 0
var numberOfDecimals: Int {
return toString.count - String(Int(self)).count - 1
}

}

Stringinit方法需要一个具体的类型。

使用字符串插值代替

extension Numeric where Self: BinaryFloatingPoint {
var toString: String {
return "(self)"
}
}

无需扩展Numeric和/或将其约束到BinaryFloatingPoint协议。您可以简单地扩展LosslessStringConvertible协议:


extension LosslessStringConvertible {
var string: String { .init(self) }
}

let int = 19
int.string         // "19"
let double = 2.5
double.string   // "2.5"

如果您想支持CGFloatDecimal类型,您可以扩展CustomStringConvertible协议:

extension CustomStringConvertible {
var string: String { .init(describing: self) }
}

let cgFloat: CGFloat = 0.5
cgFloat.string         // "0.5"
let decimal: Decimal = 1.9
decimal.string         // "1.9"

最新更新