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/