如何捕获自己,因为调用super.init?
public class Var<T> {
let _get : Void -> T
init(_ f : Void -> T) {
_get = f
}
public var value : T {
get {
return _get()
}
}
}
public class Value<T> : Var<T> {
var _val : T
public init(_ t: T) {
_val = t
super.init({ [unowned self] in self._val }) // <--- Error
}
}
错误:
error: 'self' used before super.init call
super.init({ [unowned self] in self._val })
我知道我可以覆盖getter,但这个问题无关紧要
答案 0 :(得分:3)
public class Value<T> : Var<T> {
var _val : T
public init(_ t: T) {
_val = t
var v:(()->T)!
super.init({ v() })
v = { [unowned self] in self._val }
}
}
OR
public class Value<T> : Var<T> {
var _val : T
public init(_ t: T) {
_val = t
weak var _self:Value<T>!
super.init({ _self._val })
_self = self
}
}