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

标签 ios swift text swiftui hide

我正在尝试在 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 中隐藏该文本并使其周围的 block 在 HTML 中“向上移动”(如显示:无)?如何在 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 进行简单的 bool 测试即可。

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

关于ios - SwiftUI:如果文本值为 nil 或 N/A,则使用 if 语句隐藏文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64147498/

相关文章:

ios - 如何在iOS Safari中启用iframe滚动条

ios - 在 IOS 中查看过渡 [想要更改背景]

iphone - xcode - 使搜索栏出现/消失

ios - 将uiscrollview subview 调整为全屏

swift - 为什么 UITableViewCell 宽度小于 UITableView 宽度

swift - 在屏幕外渲染 MKMapView

ios - 核心数据问题 : -[NSManagedObject setValue:]: unrecognised selector sent to instance

python - 对单词进行计数和排名时,Python 中的大型 .txt 文件出现 MemoryError

C++ 程序在大型 .TXT 文件中缺少搜索字符串。适用于较小的 .TXT 文件

haskell - ByteString 到惰性文本,反之亦然