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

问题描述

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

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

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

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


HStack() {

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

显示数据时,显示无任何问题。但是,我不确定在哪里访问此属性或放置if语句,因为此数据在View类中并且不接受函数

因此,基本上,在SwiftUI中,如何隐藏该文本并使周围的块“向上移动”(例如显示:无)?如何在View代码中实现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
        }               
    }
}