Я только начал изучать SwiftUI и где-то застрял!
Я пытаюсь изменить источник данных в стиле сегмента при изменении значения другого сегмента. Но почему-то это не работает, как ожидалось! Или я мог бы что-то не так кодировать. Может кто-нибудь разобраться, пожалуйста?
Вот мой кусок кода:
import SwiftUI
struct ContentView: View {
@State var selectedType = 0
@State var inputUnit = 0
@State var outputUnit = 1
let arrTypes = ["Temperature", "Length"]
var arrData: [String] {
switch self.selectedType {
case 0:
return ["Celsius", "Fahrenheit", "Kelvin"] //Temperature
case 1:
return ["meters", "kilometers", "feet", "yards", "miles"] //Length
default:
return ["Celsius", "Fahrenheit", "Kelvin"]
}
}
var body: some View {
NavigationView{
Form
{
Section(header: Text("Choose type"))
{
Picker("Convert", selection: $selectedType) {
ForEach(0 ..< 2, id: \.self)
{ i in
Text(self.arrTypes[i])
}
}
.pickerStyle(SegmentedPickerStyle())
}
Section(header: Text("From"))
{
Picker("", selection: $inputUnit) {
ForEach(0 ..< arrData.count, id: \.self)
{
Text(self.arrData[$0])
}
}
.pickerStyle(SegmentedPickerStyle())
}
Section(header: Text("To"))
{
Picker("", selection: $outputUnit) {
ForEach(0 ..< arrData.count, id: \.self)
{
Text(self.arrData[$0])
}
}
.pickerStyle(SegmentedPickerStyle())
}
}
}
}
}
Когда я меняю сегмент с Length
на Temperature
, он каким-то образом объединяет массив. Я попытался отладить и распечатать счет arrData
в журнале, затем он выводит правильный результат, но не обновляет интерфейс!
Первый сегмент выбран по умолчанию: ![enter image description here](https://i.stack.imgur.com/vGrYD.png)
Изменить сегмент:
![enter image description here](https://i.stack.imgur.com/cVGra.png)
Изменить сегмент обратно на первый:
![enter image description here](https://i.stack.imgur.com/zoozm.png)
Любая помощь или предложениес благодарностью.