如何捕获自己,因为调用super.init?

时间:2014-10-21 10:55:29

标签: swift

如何捕获自己,因为调用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,但这个问题无关紧要

1 个答案:

答案 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
    }
}