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