NavigationLink SwiftUI 中的三元运算符

Posted

技术标签:

【中文标题】NavigationLink SwiftUI 中的三元运算符【英文标题】:Ternary operator inside NavigationLink 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)
    

【问题讨论】:

【参考方案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 )。

以上是关于NavigationLink SwiftUI 中的三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中的 NavigationLink 不接受参数

表单/表格中的 SwiftUI 多个 NavigationLink - 条目保持突出显示

使用 XCTestCases 类中的可访问性标识符访问 NavigationLink - SwiftUI

LazyVGrid 中的 NavigationLink 循环返回所有条目,SwiftUI

NavigationLink SwiftUI 中的三元运算符

为啥我的 SwiftUI 应用程序在 `NavigationView` 中的 `navigationBarItems` 内放置 `NavigationLink` 后向后导航时崩溃?