gpt4 book ai didi

swift - 如何检查可选的@ViewBuilder 内容

转载 作者:行者123 更新时间:2023-12-05 02:45:16 27 4
gpt4 key购买 nike

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

它的左侧有一个后退导航按钮,中间有一个居中的标题,右侧有一个可选按钮。

父 View 负责通过可选的@ViewBuilder 闭包实现可选的右键。

如果父 View 没有实现任何右键,我需要提供一个默认的占位符框架以确保标题保持居中。

问题是如何检查闭包是否为空,因为将它与 EmptyView 进行比较会给出以下异常:

if self.content == EmptyView() {}

Binary operator '==' cannot be applied to operands of type '() ->Content?' and 'EmptyView'

并通过下一个警告将其与 nil 进行比较:

if self.content == nil {}

Comparing non-optional value of type '() -> Content?' to 'nil' alwaysreturns 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)
}

关于swift - 如何检查可选的@ViewBuilder 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66034129/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com