Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 仅在我的结构中扩展双精度_Swift_Protocols - Fatal编程技术网

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)——尽管它们在功能上可能是等价的。(代码完成),限制某些双精度等。。。