Swift 使用闭包初始化结构

Swift initialize a struct with a closure

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