Swift内部类可以访问外部类的自我吗?

Sky*_*Sky 35 swift

我来自Java背景,当你声明内部类时,它是静态的,并且无法访问外部类的实例,或者它不是静态的,并且可以访问正在进行的外部类的实例经营.见http://en.wikipedia.org/wiki/Inner_class#Types_of_nested_classes_in_Java

斯威夫特有这个概念吗?从我的测试中,我似乎无法获得访问Outerself对象,但我绝对可以做一些错误.

class Outer {
    let value = ""
    class Inner {
        func foo() {
            let bar = value // 'Outer.Type' does not have a member named 'value'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

cou*_*elk 36

AFAIK,您不能开箱即用访问外部类.

但你能做的是:

class Outer {

    let value = ""
    var inner = Inner()

    class Inner {

        weak var parent: Outer! = nil

        func foo() {
            let bar = parent.value
        }

    }

    init() {
        inner.parent = self
    }

}
Run Code Online (Sandbox Code Playgroud)

要么:

class Outer {

    class Inner {

        unowned let parent: Outer

        init(parent: Outer) {
            self.parent = parent
        }

    }

    let value = ""
    var inner: Inner! = nil

    init() {
        inner = Inner(parent: self)
    }

}
Run Code Online (Sandbox Code Playgroud)