swift - 将可选闭包传递给视图
问题描述
我创建了一个新的子视图,其中包含其他视图的标题。它有一个箭头图标,我想将一个闭包传递给这个子视图(profileClose 是一个函数):
PlainHeader(title: getLocalizedText("edit profile"), action: profileClose)
问题是我希望这个闭包是可选的。所以我决定把它包起来,() ? = nil
但是每次我使用PlainHeader(...)
. Xcode 说"Extra argument 'action' in call"
import SwiftUI
struct PlainHeader: View {
var title: String
let action: (() -> Void)? = nil
var body: some View {
VStack(spacing: 0) {
ZStack {
VStack(spacing: 0) {
HStack {
Image("arrow-back")
.resizable()
.scaledToFit()
.frame(width: 18, height: 7)
.padding(.leading, 31)
Spacer()
}
.onTapGesture {
print("[debugUI] action called")
if self.action != nil {
self.action!()
}
}
}
VStack {
HStack {
Text("\(title)")
.lineLimit(nil)
.multilineTextAlignment(.center)
.frame(maxWidth: 280)
.font(.custom(Font.primaryTextFont, size: 20))
.foregroundColor(Color.mainSubtitleColor)
}
}
}
.padding(.top, 20)
}
.frame(height: 80)
}
}
我究竟做错了什么?我只想在有和没有关闭的情况下使用它..所以我将它设置为可选并给它一个默认值 nil..
解决方案
将变量 let 更改为 var。
var action: (() -> Void)? = nil
推荐阅读
- javascript - 为什么我的单选按钮验证不起作用
- java - ViewModelProvider.Factory 在 Android 上使用 Dagger 和 Java 的片段上保持为空
- node.js - 使用 formData 的 Express 节点获取的无效 json 响应正文错误
- angular - 通过@Input 将数据传递给子节点与从服务或存储中检索
- python - 管道和子流程模块有什么区别?
- swift - 如何快速制作一个空对象
- c# - 单击按钮时的基本增量
- vba - 如何根据我输入的特定项目从表中返回多个值?
- vue.js - 当数据位于计算字段中时,如果数据已加载,则会收到通知
- javascript - 在 Testcafe 中使用隐藏输入上传文件