繁体   English   中英

如何转换 ClosedRange<int> 到 ClosedRange<double> 在 Swift</double></int>

[英]How to convert ClosedRange<Int> to ClosedRange<Double> in Swift

我有一个 ClosedRange 作为参数传入,现在我需要将它转换为 ClosedRange:

  let range: ClosedRange<Int>
  
  init(range: ClosedRange<Int>) {
    self.range = range
  }


  var body: some View {
    Slider(value: doubleBinding, in: range.startIndex...range.endIndex, step: 1)
  }

Slider init function 采用 ClosedRange 参数。 所以我得到了这个错误:

Cannot convert value of type 'ClosedRange<Int>.Index' to expected argument type 'Double'

所以我尝试了这个:

  let min = Double(Int(range.startIndex))
  let max = Double(Int(range.endIndex))
  Slider(value: doubleBinding, in: min...max, step: 1)

但是得到这个错误:

Initializer 'init(_:)' requires that 'ClosedRange<Int>.Index' conform to 'BinaryInteger'

您使用了错误的属性。 它不是startIndexendIndex 它是lowerBoundupperBound

Slider(value: doubleBinding, 
       in: Double(range.lowerBound)...Double(range.upperBound), 
       step: 1)

您可以编写一个ClosedRange初始化程序来方便地执行此操作:

extension ClosedRange {
    init<Other: Comparable>(_ other: ClosedRange<Other>, _ transform: (Other) -> Bound) {
        self = transform(other.lowerBound)...transform(other.upperBound)
    }
}

用法:

Slider(value: doubleBinding, 
       in: ClosedRange(range, Double.init), 
       step: 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM