Swift 将可选闭包传递给视图
我创建了一个新的子视图,其中包含其他视图的标题。 它有一个箭头图标,我想给这个子视图传递一个闭包profileClose是一个函数:Swift 将可选闭包传递给视图,swift,swiftui,closures,Swift,Swiftui,Closures,我创建了一个新的子视图,其中包含其他视图的标题。 它有一个箭头图标,我想给这个子视图传递一个闭包profileClose是一个函数: PlainHeader(title: getLocalizedText("edit profile"), action: profileClose) 问题是我希望这个闭包是可选的。。所以我决定把它包起来无,但在我每次使用PlainHeader时都这样做之后。。。。Xcode在调用中表示额外参数“action” 我做错了什么?我只想用它来结束
PlainHeader(title: getLocalizedText("edit profile"), action: profileClose)
问题是我希望这个闭包是可选的。。所以我决定把它包起来无,但在我每次使用PlainHeader时都这样做之后。。。。Xcode在调用中表示额外参数“action”
我做错了什么?我只想用它来结束和不结束。。所以我将其设置为可选,并给它一个默认值nil..将变量let更改为var
var action: (() -> Void)? = nil
将变量let更改为var
var action: (() -> Void)? = nil
问题在于:
let action: (() -> Void)? = nil
您将其声明为let,并立即将其设置为nil,因此无法再次初始化
您可以将其声明为var,也可以编写一个初始化器:
struct PlainHeader: View {
private let title: String
private let action: (() -> Void)?
public init(title: String,
action: (() -> Void)? = nil) {
self.title = title
self.action = action
}
//etc.
}
问题在于:
let action: (() -> Void)? = nil
您将其声明为let,并立即将其设置为nil,因此无法再次初始化
您可以将其声明为var,也可以编写一个初始化器:
struct PlainHeader: View {
private let title: String
private let action: (() -> Void)?
public init(title: String,
action: (() -> Void)? = nil) {
self.title = title
self.action = action
}
//etc.
}
@卢卢加:你为什么使用公共初始化?单个init完成了我认为完成的工作。让我知道为什么,或者我缺少什么?init也很好。@LuLuGaGa:为什么使用public init?单个init完成了我认为完成的工作。让我知道为什么,或者我遗漏了什么?init也很好。