Возвращение заполненного VStack из функции SwiftUI - PullRequest
1 голос
/ 09 января 2020

Я хотел бы вернуть различные представления из функции, текста или VS-текста и кнопки. Вот одна из моих попыток:

func buildResponseText2() -> some View {
    if (userData.success) {
        return VStack {
            Text("Well Done")
            Button("Play Again", action: {self.userData.reset()})
        }
    }
    return VStack {
        Text("Unlucky")
    }
}

Это не компилируется, я получаю ошибку

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

Есть ли способ вернуть контейнеры вида, такие как VStack, с разнородным содержимым?

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вы были близки к решению, на самом деле. Действительно, вы можете использовать some View в качестве типа возврата следующим образом:

func buildResponseText2() -> some View {
    Group {
        if userData.success {
            VStack {
                Text("Well Done")
                Button("Play Again", action: {self.userData.reset()})
            }
        } else {
            Text("Unlucky")
        }
    }
}
2 голосов
/ 09 января 2020

Используйте тип стирания AnyView в качестве типа возврата, как показано ниже

func buildResponseText2() -> AnyView {
    if (userData.success) {
        return AnyView(VStack {
            Text("Well Done")
            Button("Play Again", action: {self.userData.reset()})
        })
    }
    return AnyView(VStack {
        Text("Unlucky")
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...