如何检查可选的@ViewBuilder 内容
Posted
技术标签:
【中文标题】如何检查可选的@ViewBuilder 内容【英文标题】:How to check for Optional @ViewBuilder content 【发布时间】:2021-02-03 19:07:28 【问题描述】:以下视图是 List() 的第一行,用于替换隐藏的导航栏。
左侧有一个后退导航按钮,中间有一个居中的标题,右侧有一个可选按钮。
父视图通过可选的@ViewBuilder 闭包负责可选的右键实现。
如果父视图没有实现任何右键,我需要提供一个默认的占位符框架以确保标题保持居中。
问题是如何检查闭包是否为空,因为将其与 EmptyView 进行比较会产生以下异常:
if self.content == EmptyView()
二元运算符'=='不能应用于'()类型的操作数 -> 内容?'和“空视图”
并在下一个警告中将其与 nil 进行比较:
if self.content == nil
比较 '() -> Content?' 类型的非可选值总是“零” 返回错误
import SwiftUI
struct TestTitle<Content: View>: View
@Environment(\.presentationMode) var presentation
var caption:String
let content: () -> Content?
public init(_ caption:String, @ViewBuilder content: @escaping () -> Content? = nil )
self.caption = caption
self.content = content
var body: some View
HStack()
Image(systemName: "chevron.backward")
.onTapGesture
self.presentation.wrappedValue.dismiss()
Spacer()
Text(self.caption)
Spacer()
**if self.content == nil**
Text(" ")
.frame(width:32)
else
self.content()
【问题讨论】:
【参考方案1】:在这里(使用 Xcode 12.4 测试)
if let content = content()
content
else
Text(" ")
.frame(width:32)
【讨论】:
【参考方案2】:一种可能的解决方案是将Content
类型与EmptyView
进行比较:
if Content.self == EmptyView.self
Text(" ")
.frame(width: 32)
else
self.content()
【讨论】:
以上是关于如何检查可选的@ViewBuilder 内容的主要内容,如果未能解决你的问题,请参考以下文章
如何使 django 中的 FileField 成为可选的?
如何使 django 中的 FileField 成为可选的?