Нет отображения значения в представлении SwiftUI Picker - PullRequest
1 голос
/ 07 мая 2020

Недавно я изменил код средства выбора в SwiftUI, чтобы использовать перечисление CaseIterable, а не массив элементов.

Вот перечисление:

enum ReturnTypes : String, CaseIterable {
    case Scaler
    case Vector
    case Matrix
}

Вот код средства выбора:

        NavigationView {
            Form {
                Picker("Return Type:", selection: $task.returnType) {
                    ForEach(ReturnTypes.allCases, id: \.self) { type in
                        Text(type.rawValue)
                    }
                }
            }
         }

Когда я ранее имел данные в массиве и использовал

let returnTypes = ["Scaler", "Vector", "Matrix"]
...
                Picker("Return Type:", selection: $task.returnType) {
                    ForEach(0..<returnTypes.count, id: \.self) {
                        Text(returnTypes[$0])
                    }
                }

, текущее значение task.returnType отображалось в строке выбора формы рядом с шевроном. Используя перечисление, task.returnType НЕ отображается рядом с шевроном, и когда я перехожу к представлению выбора средства выбора, ничего не проверяется, и даже если я выберу элемент, у меня все равно ничего не будет отображаться рядом с шевроном. Кто-нибудь еще сталкивался с этой проблемой?

1 Ответ

1 голос
/ 07 мая 2020

Выбор должен быть того же типа, что и данные средства выбора, а не текстовая метка, как в рабочем примере ниже. Протестировано с Xcode 11.4 / iOS 13.4.

demo

struct ContentView: View {
        @State private var returnType: ReturnTypes = .Scaler
        var body: some View {
        NavigationView {
            Form {
                Picker("Return Type:", selection: $returnType) {
                    ForEach(ReturnTypes.allCases, id: \.self) { type in
                        Text(type.rawValue)
                    }
                }
            }
         }
    }
}
...