Я занимаюсь созданием пользовательских представлений для SwiftUI и мне не хватает того, как работают привязки. У меня есть следующий код:
import SwiftUI
struct ContentView: View {
@State var number: Int = 0
var body: some View {
VStack {
NumberPicker(format: "%02d", max: 20, value: $number)
Text("You picked \(number)")
}
}
}
struct NumberPicker: View {
var format: String = "%d"
var max: Int
@Binding var value: Int
var valueProxy: Binding<String> {
Binding<String>(
get: { String(format: self.format, self.$value.wrappedValue) },
set: { self.value = Int(String($0))! }
)
}
var body: some View {
Picker("", selection: valueProxy) {
ForEach(0..<max) { item in
Text(String(format: self.format, item))
}
}
.frame(width: 40, height: 175)
.clipped()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(number: 5)
}
}
Когда я запускаю это (в предварительном просмотре или в симуляторе), представление автоматически не выбирает 05
при запуске, как я ожидал. Кроме того, манипулирование средством выбора не обновляет представление Text
под ним. Из того, что я прочитал, я чувствую, что это должно сработать, но, может быть, я упускаю что-то очевидное? Или я иду по этому пути неправильно? Это использует Xcode 11.3.1