Operator ternary di dalam NavigationLink SwiftUI
Saya mengalami masalah saat mencoba menggunakan operator ternary pada tombol di NavigationLink. Saya memiliki serangkaian kampanye, yang ditampilkan di carouselView. Di bawah carousel terdapat tombol (NavigationLink) untuk membuka tampilan lain yang menampilkan detail kampanye. Larik kampanye awalnya kosong, jadi saya harus memeriksa apakah self.cardCampaigns> 0, jika benar, itu harus menavigasi ke tampilan yang menampilkan detail kampanye, jika tidak abaikan (Saya mencoba untuk menampilkan tampilan dengan teks " Tidak ada kampanye yang tersedia ". Saya menggunakan operator terner untuk itu, tetapi tidak berhasil. Saya mendapatkan" Nilai hasil dalam '?:' Ekspresi memiliki jenis kesalahan 'CampaignDetailsView' dan 'Teks' "yang tidak cocok saat saya menggunakan operator terner.
Kode saya di bawah ini:
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)
}
}
Jawaban
Ini karena jenis CampaignDetailsViewdan Texttidak cocok. Anda perlu menggunakan @ViewBuilder(atau hanya a Group, VStackdll).
Berikut adalah solusi dengan tampilan tujuan sebagai @ViewBuilderproperti yang dihitung:
@ViewBuilder
var destinationView: some View {
if cardCampaigns.count > 0 {
CampaignDetailsView(viewModel: CampaignDetailsViewModel(campaign: cardCampaigns[self.count].campaign))
} else {
Text("No Campaign found")
}
}
Yang bisa Anda gunakan seperti ini:
NavigationLink(destination: destinationView) { ... }