Swift 如何检查可选的@ViewBuilder内容
以下视图是List()的第一行,用于替换隐藏的导航栏Swift 如何检查可选的@ViewBuilder内容,swift,swiftui,Swift,Swiftui,以下视图是List()的第一行,用于替换隐藏的导航栏 左边有一个后退导航按钮,中间有一个中间标题,右边有一个可选按钮。 父视图负责通过可选的@ViewBuilder闭包实现可选的右按钮 如果父视图未实现任何右按钮,则需要提供默认占位符框架,以确保标题保持居中 问题在于如何检查闭包是否为空,因为将其与EmptyView进行比较会出现以下异常: if self.content == EmptyView() {} 二进制运算符“==”不能应用于“()-”类型的操作数 “内容”和“空视图” 并通过下一
左边有一个后退导航按钮,中间有一个中间标题,右边有一个可选按钮。
父视图负责通过可选的@ViewBuilder闭包实现可选的右按钮 如果父视图未实现任何右按钮,则需要提供默认占位符框架,以确保标题保持居中 问题在于如何检查闭包是否为空,因为将其与EmptyView进行比较会出现以下异常:if self.content == EmptyView() {}
二进制运算符“==”不能应用于“()-”类型的操作数
“内容”和“空视图”
并通过下一个警告将其与零进行比较:
if self.content == nil {}
始终将“()->Content”类型的非可选值与“nil”进行比较
返回false
导入快捷界面
结构测试标题:视图{
@环境(\.presentationMode)变量表示
变量标题:字符串
让内容:()->内容?
public init(uquot:String,@ViewBuilder内容:@escaping()->content?={nil}){
self.caption=标题
self.content=内容
}
var body:一些观点{
HStack(){
图像(系统名称:“V形向后”)
.ontapsigne{
self.presentation.wrappedValue.disclose()文件
}
垫片()
文本(self.caption)
垫片()
**如果self.content==nil**{
正文(“”)
.框架(宽度:32)
}否则{
self.content()
}
}
}
}
在这里(使用Xcode 12.4测试)
一种可能的解决方案是将
内容
类型与空视图
进行比较:
if Content.self == EmptyView.self {
Text(" ")
.frame(width: 32)
} else {
self.content()
}
if let content = content() {
content
}
else {
Text(" ")
.frame(width:32)
}
if Content.self == EmptyView.self {
Text(" ")
.frame(width: 32)
} else {
self.content()
}