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 语句?
我相信这可能很简单,但非常感谢您的帮助! :)
if
、if-let
和 if-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
}
}
}
我正在尝试在 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 语句?
我相信这可能很简单,但非常感谢您的帮助! :)
if
、if-let
和 if-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
}
}
}