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
})
答案 0 :(得分:5)
传递给构造函数的闭包修改给定的参数,
因此,它必须采用 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