如果变量不是 nil,如何在 swift UI 中显示文本视图?
Posted
技术标签:
【中文标题】如果变量不是 nil,如何在 swift UI 中显示文本视图?【英文标题】:How to display a text view in swift UI if the variable isn't nil? 【发布时间】:2020-05-08 15:41:20 【问题描述】:这基本上是我的代码:
var myString: String?
var body: some View
NavigationView
if myString != nil
CustomView(text: myString ?? "")
如果我尝试不添加 ?? ""
部分,它不起作用,Value of optional type 'String?' must be unwrapped to a value of type 'String'
说。如果我如上所示添加它,它似乎可以工作,但是如果永远不会出现这种情况,为什么我需要一个默认的空字符串值? (因为它只会在 myString 不为零时到达该代码)有没有办法让这段代码更干净?
【问题讨论】:
【参考方案1】:您需要使用可选绑定来解开安全可选变量。然而,仅仅在body
内使用它会导致编译器错误,因为并非所有控制流(包括if let
)都允许在视图的body
内使用,因此您需要将其包装在另一个计算属性中。
struct MyView: View
var myString: String?
var body: some View
NavigationView
innerView
var innerView: some View
if let myString = myString
return AnyView(CustomView(text: myString))
else
return AnyView(EmptyView())
或者你可以使用Optional.map
来简化它。
struct MyView: View
var myString: String?
var body: some View
NavigationView
myString.map CustomView(text: $0)
【讨论】:
【参考方案2】:if let myString = myString
CustomView(text: myString)
这是安全地解开可选项的一种方法,但正如它所指出的那样,它在视图构建器块中不起作用。相反,您可以使用map
来保持简单。
var myString: String?
var body: some View
NavigationView
myString.map CustomView(text: $0)
【讨论】:
这会导致编译器错误Closure containing control flow statement cannot be used with function builder 'ViewBuilder'
。见How to have a dynamic list of views using SwiftUI。
@pizzae 不,body
中的那段代码无法编译
@pizzae 我更新了我的答案以使用 SwiftUI 视图构建器以上是关于如果变量不是 nil,如何在 swift UI 中显示文本视图?的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 检查弱变量是不是为 nil 或不是线程安全的?