【问题标题】:Ternary operator inside NavigationLink SwiftUINavigationLink SwiftUI 中的三元运算符
【发布时间】:2020-09-27 13:56:37
【问题描述】:

尝试在 NavigationLink 中的按钮上使用三元运算符时遇到问题。我有一系列活动,显示在轮播视图中。 Bellow carousel 有一个按钮 (NavigationLink) 用于打开另一个视图,该视图显示活动的详细信息。活动数组最初是空的,所以我必须检查 self.cardCampaigns > 0,如果是这样,它应该导航到显示活动详细信息的视图,否则忽略(我正在尝试显示带有文本的视图“没有可用的广告系列”。我为此使用三元运算符,但它不起作用。我在使用三元运算符时收到“结果值在'?:'表达式的类型不匹配'CampaignDetailsView'和'Text'”错误。

我的代码如下:

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)
    }
}

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    这是因为CampaignDetailsViewText 的类型不匹配。您需要使用@ViewBuilder(或只是GroupVStack 等)。

    这是一个将目标视图作为@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) { ... }
    

    【讨论】:

    • 谢谢,我的意思是我知道这是因为它们不匹配但不知道如何使它们成为相似的结构( ViewBuilder 、 group 或 VStack )。
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 2023-02-04
    • 1970-01-01
    • 2021-10-06
    • 2021-08-01
    • 2021-02-26
    • 2018-09-10
    相关资源
    最近更新 更多