Сообщение об ошибке: общий параметр «FalseContent» не может быть выведен

При создании, если я получаю это сообщение об ошибке.

If проверяет, является ли bool, называемый loggedIn, истинным или ложным.

struct ContentView: View{

    @State var loggedIn = false
    @State var user: BarberUser?
    @State var username: String = ""
    @State var password: String = ""

    var body: some View{
            Group {
                if !loggedIn {

                    VStack{
                      .
                      .
                      .
                     }



                }else{
                    .
                    .
                    .
                }
            }
        }
    }

Строка, которая выводит эту ошибку:

if !loggedIn {

что является причиной этой ошибки? И как я могу это исправить?

Если вам нужно больше информации о коде, спросите меня, и я предоставлю.

Всего 1 ответ


Первая проблема заключается в том, что SwiftUI часто показывает ошибки в неправильных местах. Вы можете попытаться извлечь ваши подпредставления, и это сделает ваш код более понятным и более удобным для поиска ошибок. Второе, что я вижу в вашем фрагменте кода: компилятор должен показать вам:

Функция объявляет непрозрачный возвращаемый тип, но не имеет в своем теле операторов возврата, из которых можно вывести базовый тип

если вы оставите только эти строки кода:

struct IfElseStatementsInBody: View {

    @State var loggedIn = false

    var body: some View {

        if !loggedIn {
            VStack {
                Text("Need to login")
                Button(action: { self.loggedIn = true }) {
                    Text("Log in!")
                }
            }
        } else {
            Text("Main view")
        }

    }

}

Обычный способ избежать этого - AnyView ваши представления в AnyView . Помните, что body - это просто вычисляемая переменная, и он должен знать, что ему нужно return . Другой способ - встроить if...else в другое представление, например VStack или ZStack

struct IfElseStatementsInBody: View {

    @State var loggedIn = false

    var body: some View {

        if !loggedIn {
            return AnyView(ExtractedView(loggedIn: $loggedIn)) // how to extract subview from here
        } else {
            return AnyView(Text("Main view"))
        }

    }

}

// ... to here
struct ExtractedView: View {

    @Binding var loggedIn: Bool

    var body: some View {
        VStack {
            Text("Need to login")
            Button(action: { self.loggedIn = true }) {
                Text("Log in!")
            }
        }
    }
}

// MARK: embed if...else into ZStack. in this case you'll see changing of
// "loggedIn" variable in the canvas
struct EmbedIfElseStatementsInBody: View {

    @State var loggedIn = false

    var body: some View {

        ZStack {
            if !loggedIn {
                ExtractedView(loggedIn: $loggedIn)// how to extract subview from here
            } else {
                Text("Main view")
            }
        }


    }

}

PS надеюсь, это поможет. в другом случае ошибка в другом месте, но я не вижу ее сейчас из-за отсутствия кода.


Есть идеи?

10000