Swift 仅在我的结构中扩展双精度
我希望能够通过自定义转换将Swift 仅在我的结构中扩展双精度,swift,protocols,Swift,Protocols,我希望能够通过自定义转换将Double扩展为String,但我希望仅将此限制为使用类/结构的实现。为了 extension Double { var customStringOutput: String { guard self >= 0.0 else { return "Invalid" } return "My number is: \(self)" } } struct MyStruct { var myNumber: Double = 100.0 }
Double
扩展为String
,但我希望仅将此限制为使用类/结构的实现。为了
extension Double {
var customStringOutput: String {
guard self >= 0.0 else { return "Invalid" }
return "My number is: \(self)"
}
}
struct MyStruct {
var myNumber: Double = 100.0
}
let myStruct = MyStruct()
let doubleFail = 99.0
print(myStruct.myNumber.customStringOutput) //"My number is: 100.0"
print(doubleFail.customStringOutput) //"My number is :99.0" - Should fail
我已尝试创建一个协议,例如:
protocol DoubleCustomStringConvertable { ... }
将其应用于Double
会产生与直接扩展Double相同的结果。我可以在我的结构中创建一个函数,将double作为参数并返回字符串,这在技术上解决了我的问题,但这更多是一个学习练习,我喜欢该属性更简洁的语法
如何允许协议仅应用于我定义的结构中的Double?这可能是如此简单,我会踢自己 不要让它成为一个协议,而只是在您的结构中定义的一个函数。没有办法限制协议的范围(对于像
MyStruct
这样的值类型中的所有Double
s)。您考虑过Double上的私有扩展吗?正如我所提到的,我可以这样做,但是我会在不同的结构中复制需要这个定义的代码。我可以将函数放入协议中并应用于需要它的结构,但我也喜欢double.parameter的语法,而不是func(double)——尽管它们在功能上可能是等价的。(代码完成),限制某些双精度等。。。