Как: использовать условные пользовательские фоновые представления для модификатора фона? - PullRequest
1 голос
/ 18 июня 2020

Обычно просто использовать тернарный опаратор для условных изменений модификатора. Но когда я пытаюсь переключиться между двумя пользовательскими представлениями для модификатора фона, я получаю эту ошибку. Это не тот случай, если вы, например, напрямую указываете цвета как альтернативные представления.

Ошибка: Значения результата в '? : 'выражение имеет несовпадающие типы' BackgroundView1 'и' BackgroundView2 '

import SwiftUI

struct TestView: View {

@State var buttonPressed = false

var body: some View {

    Button(action: {self.buttonPressed.toggle()}) {

        Image(systemName: "circle.fill")
            .background(self.buttonPressed ? BackgroundView1() : BackgroundView2()) // Error
//                .background(buttonPressed ? Color.red : Color.green)
    }

}
}

struct BackgroundView1: View {

var body: some View {

    Color.red

    }
}

struct BackgroundView2: View {

var body: some View {

    Color.green

}
}

struct TestView_Previews: PreviewProvider {
static var previews: some View {
    TestView()
}
}

1 Ответ

1 голос
/ 18 июня 2020

Представление должно быть одного типа, здесь возможно решение.

Image(systemName: "circle.fill")
    .background(Group {
       if self.buttonPressed { BackgroundView1() }
         else { BackgroundView2() }
    }) 

альтернативный вариант, если представления простые (в противном случае это может быть проблема производительности),

    Image(systemName: "circle.fill")
        .background(self.buttonPressed ? AnyView(BackgroundView1()) : AnyView(BackgroundView2()))
...