Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何检查可选的@ViewBuilder内容_Swift_Swiftui - Fatal编程技术网

Swift 如何检查可选的@ViewBuilder内容

Swift 如何检查可选的@ViewBuilder内容,swift,swiftui,Swift,Swiftui,以下视图是List()的第一行,用于替换隐藏的导航栏 左边有一个后退导航按钮,中间有一个中间标题,右边有一个可选按钮。 父视图负责通过可选的@ViewBuilder闭包实现可选的右按钮 如果父视图未实现任何右按钮,则需要提供默认占位符框架,以确保标题保持居中 问题在于如何检查闭包是否为空,因为将其与EmptyView进行比较会出现以下异常: if self.content == EmptyView() {} 二进制运算符“==”不能应用于“()-”类型的操作数 “内容”和“空视图” 并通过下一

以下视图是List()的第一行,用于替换隐藏的导航栏

左边有一个后退导航按钮,中间有一个中间标题,右边有一个可选按钮。

父视图负责通过可选的@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()
}