Swift使用闭包初始化结构

时间:2015-06-26 10:51:09

标签: swift closures init

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
})

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