Тернарный оператор внутри NavigationLink SwiftUI
У меня проблема при попытке использовать тернарный оператор для кнопки в NavigationLink. У меня есть массив кампаний, который отображается в carouselView. Ниже карусели есть кнопка (NavigationLink) для открытия другого представления, в котором отображаются детали кампании. Массив кампаний изначально пуст, поэтому мне нужно проверить, если self.cardCampaigns> 0, если это правда, он должен перейти к представлению, которое отображает детали кампании, в противном случае игнорировать (я пытаюсь показать представление с текстом " Нет доступных кампаний ». Я использую для этого тернарный оператор, но он не работает. Я получаю« Значения результатов в выражении '?:' Имеют несовпадающие типы »CampaignDetailsView 'и« Текст », ошибка, в которой я использую тройной оператор.
Мой код ниже:
NavigationLink(destination:
self.cardCampaigns.count > 0 ? CampaignDetailsView(viewModel: CampaignDetailsViewModel(campaign: cardCampaigns[self.count].campaign)) : Text("No Campaign found")
) {
ZStack {
RoundedRectangle(cornerRadius: 8)
.foregroundColor(Color.orOrangeColor)
.frame(width: 300, height: 50)
Text("Details")
.foregroundColor(.white)
}
}
Ответы
Это потому, что типы CampaignDetailsViewи Textне совпадают. Вы должны использовать @ViewBuilder(или просто Group, и VStackт.д.).
Вот решение с целевым представлением в качестве @ViewBuilderвычисляемого свойства:
@ViewBuilder
var destinationView: some View {
if cardCampaigns.count > 0 {
CampaignDetailsView(viewModel: CampaignDetailsViewModel(campaign: cardCampaigns[self.count].campaign))
} else {
Text("No Campaign found")
}
}
Что вы можете использовать так:
NavigationLink(destination: destinationView) { ... }