[英]How to convert ClosedRange<Int> to ClosedRange<Double> in Swift
I have a ClosedRange passed in as a parameter, and now I need to convert it to a ClosedRange:我有一个 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)
}
The Slider init function takes a ClosedRange argument. Slider init function 采用 ClosedRange 参数。 So I got this error:
所以我得到了这个错误:
Cannot convert value of type 'ClosedRange<Int>.Index' to expected argument type 'Double'
So I tried this:所以我尝试了这个:
let min = Double(Int(range.startIndex))
let max = Double(Int(range.endIndex))
Slider(value: doubleBinding, in: min...max, step: 1)
But got this error:但是得到这个错误:
Initializer 'init(_:)' requires that 'ClosedRange<Int>.Index' conform to 'BinaryInteger'
You've used the wrong property.您使用了错误的属性。 It's not
startIndex
and endIndex
.它不是
startIndex
和endIndex
。 It's lowerBound
and upperBound
:它是
lowerBound
和upperBound
:
Slider(value: doubleBinding,
in: Double(range.lowerBound)...Double(range.upperBound),
step: 1)
You can write a ClosedRange
initialiser that conveniently does this:您可以编写一个
ClosedRange
初始化程序来方便地执行此操作:
extension ClosedRange {
init<Other: Comparable>(_ other: ClosedRange<Other>, _ transform: (Other) -> Bound) {
self = transform(other.lowerBound)...transform(other.upperBound)
}
}
Usage:用法:
Slider(value: doubleBinding,
in: ClosedRange(range, Double.init),
step: 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.