我有一個作為引數傳入的 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 函式采用 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'
uj5u.com熱心網友回復:
您使用了錯誤的屬性。不是startIndex和endIndex。它是lowerBound和upperBound:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429692.html
標籤:迅速
