SwiftUI не любит переключатель? - PullRequest
0 голосов
/ 22 января 2020

Пытаясь следить за этим обсуждением , я реализовал предложение Юрий Котов :

struct ContentView: View {

@State private var index = 0

@ViewBuilder
 var body: some View {
   if index == 0 {
       MainView()
   } else {
       LoginView()
   }
}

Работает отлично. Но если я попытаюсь использовать вместо него оператор switch:

    switch  index {
        case 0: MainView()
        case 1: LoginView()
        default:
            print("# error in switch")
        }

, то ничего не произойдет. Нет предупреждения об ошибке, но также нет и результата. Может ли кто-нибудь помочь?

1 Ответ

0 голосов

Как сказал @Sweeper: ваши операторы if...else и switch...case не равны. Основная идея: body - это просто вычисляемая переменная протокола просмотра , и она должна возвращать что-то своего типа. Конечно, вы можете сделать это с помощью switch...case заявлений. В вашем коде фрагмент кода содержит ошибку default: тело не может вернуть () -> Void, только some View. Итак, ваш код должен выглядеть следующим образом:

struct ViewWithSwitchStatements: View {

    @State var option = 0

    var body: some View {

        switch option {
        case 1:
            return AnyView(Text("Option 1"))
        case 2:
            return AnyView(Text("Option 2"))
        default:
            return AnyView(Text("Wrong option!"))
        }

    }
}

Однако вы не можете поместить его в VStack или что-то еще, например if...else операторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...