仅在我的结构

时间:2016-05-31 12:35:21

标签: 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
}

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?这可能很简单,我会踢自己!

1 个答案:

答案 0 :(得分:1)

不要让它成为一个协议,而只是在你的结构中定义的一个函数。无法限制协议的范围(对于Double等值类型中的所有MyStruct