我希望能够通过自定义转换将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相同的结果。我可以在我的struct中创建一个函数,它将double作为参数并返回我的字符串,这将技术上解决我的问题,但这更像是一个学习练习,我喜欢该属性的更清晰的语法
如何允许协议仅在我定义的结构中应用于Double?这可能很简单,我会踢自己!
答案 0 :(得分:1)
不要让它成为一个协议,而只是在你的结构中定义的一个函数。无法限制协议的范围(对于Double
等值类型中的所有MyStruct
。