Свести TupleViews с помощью SwiftUI - PullRequest
2 голосов
/ 08 июня 2019

Хорошо, SwiftUI был выпущен на этой неделе, поэтому мы все n00bs, но ... У меня есть следующий тестовый код:

var body: some View {
    switch shape {
    case .oneCircle:
        return ZStack {
            Circle().fill(Color.red)
        }
    case .twoCircles:
        return ZStack {
            Circle().fill(Color.green)
            Circle().fill(Color.blue)
        }
    }
}

, который выдает следующую ошибку:

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

Это происходит потому, что первый тип ZStack имеет такой тип:

ZStack<ShapeView<Circle, Color>>

ивторой тип этого типа:

ZStack<TupleView<(ShapeView<Circle, Color>, ShapeView<Circle, Color>)>>

Как мне справиться с этим в SwiftUI?Можно ли их как-то сплющить или сделать так, чтобы они соответствовали одному типу.

Ответы [ 2 ]

7 голосов
/ 08 июня 2019

Один из способов исправить это - использовать ластик типа AnyView:

var body: some View {
    switch shape {
    case .oneCircle:
        return AnyView(ZStack {
            Circle().fill(Color.red)
        })
    case .twoCircles:
        return AnyView(ZStack {
            Circle().fill(Color.green)
            Circle().fill(Color.blue)
        })
    }
}
0 голосов
/ 27 июня 2019

Вы также можете использовать Group, которая является логическим контейнером, поэтому ничего не изменится.

 var body: some View {
    Group {
     switch shape {
     case .oneCircle:
        return ZStack {
            Circle().fill(Color.red)
        }
     case .twoCircles:
        return ZStack {
            Circle().fill(Color.green)
            Circle().fill(Color.blue)
        }
     }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...