以下视图是List()的第一行,用于替换隐藏的导航栏。
它的左侧是后退导航按钮,中间是居中标题,右侧是可选按钮。
父视图通过可选的@ViewBuilder闭包负责可选的右键按钮实现。
如果父视图未实现任何右键,则需要提供一个默认的占位符框架,以确保标题居中放置。
问题是如何检查闭包是否为空,因为将其与EmptyView进行比较会产生以下异常:
if self.content == EmptyView() {}
二进制运算符'=='不能应用于类型'()-> Content?'的操作数 和“ EmptyView”
并通过下一个警告将其与nil进行比较:
if self.content == nil {}
比较类型'()-> Content?'的非可选值 为“ nil”总是返回false
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()
}
}
}
}
在这里(通过Xcode 12.4测试)
if let content = content() {
content
}
else {
Text(" ")
.frame(width:32)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句