gpt4 book ai didi

Swift 使用闭包初始化结构

转载 作者:搜寻专家 更新时间:2023-10-31 22:15:22 25 4
gpt4 key购买 nike

public struct Style {

public var test : Int?

public init(_ build:(Style) -> Void) {
build(self)
}
}

var s = Style { value in
value.test = 1
}

变量声明错误

Cannot find an initializer for type 'Style' that accepts an argument list of type '((_) -> _)'

有谁知道为什么这行不通,对我来说这似乎是合法的代码

郑重声明,这也行不通

var s = Style({ value in
value.test = 1
})

最佳答案

传递给构造函数的闭包修改给定的参数,因此它必须有一个inout-parameter 并用&self 调用:

public struct Style {

public var test : Int?

public init(_ build:(inout Style) -> Void) {
build(&self)
}
}

var s = Style { (inout value : Style) in
value.test = 1
}

println(s.test) // Optional(1)

请注意,使用 self(如 build(&self))要求其所有属性已经初始化。这在这里有效,因为可选被隐式初始化为 nil。或者你可以定义具有初始值的非可选属性:

public var test : Int = 0

关于Swift 使用闭包初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071295/

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