SwiftUI:如果文本值为 nil 或 N/A,则使用 if 语句隐藏文本

SwiftUI: Hiding Text with an if statement if text value is nil or N/A

我正在尝试在 UIKit 中做一些对我来说很简单的事情 - 但无法在 SwiftUI 中工作。

我正在从 API 中提取数据。该数据是动态的——通话的某些部分可能不会每次都出现。我通过将所有这些数据设为可选并在没有数据的文本字段中使用 nil 运算符来保护应用程序 return “N/A”。在 UIKit 中,我能够简单地使用一个 if 语句:

if self.cityLabel.text == "N/A" {
    self.cityLabel.isHidden = true
}

现在在 SwiftUI 中,我有以下内容:


HStack() {

     Text(self.model?.city ?? "N/A")
                            
}

当数据存在时,它显示没有任何问题。但是,我不确定在哪里访问此 属性 或放置 if 语句,因为此数据位于视图 class 中并且不接受函数。

所以基本上,在 SwiftUI 中如何在 HTML 中隐藏该文本并使其周围的块“向上移动”(如显示:none)?如何在视图代码中实现 if 语句?

我相信这可能很简单,但非常感谢您的帮助! :)

ifif-letif-else 现在也可以在 View 中使用(我认为它是在 Xcode 12 中引入的)。这应该有效:

var body: some View {
    HStack() {
        if let city = self.model?.city {
            Text(city)
        }                      
    }
}

编辑:如果您不关心里面的内容 self.model?.city,只需对 nil 进行简单的布尔测试即可。

var body: some View {
    HStack() {
        if self.model?.city != nil {
            /// self.model?.city is not nil!
            Text("Not nil")
        }                  
    }
}

编辑 2:好的,如果文本是“N/A”,您不想显示它。但是,由于文本本身 (self.model?.city) 是可选的,因此您需要先将其解包。

var body: some View {
    HStack() {
        if let city = self.model?.city { /// unwrap self.model?.city
            if city != "N/A" { /// city is not "N/A"!
                
                /// show the text
                Text(city)
            } /// else, don't show anything
        }               
    }
}