Swift 没有嵌套类吗?
例如,我似乎无法从嵌套类访问主类的属性测试。
class master{
var test = 2;
class nested{
init(){
let example = test; //this doesn't work
}
}
}
Swift 的嵌套类与 Java 的嵌套类不同。嗯,它们就像一种 Java 嵌套类,但不是您想象的那种。
在Java中,内部类的实例自动拥有对外部类实例的引用(除非内部类被声明为static
)。如果您有外部类的实例,则只能创建内部类的实例。这就是为什么在 Java 中你会说这样的话this.new nested()
.
在 Swift 中,内部类的实例独立于外部类的任何实例。就好像 Swift 中的所有内部类都是使用 Java 声明的static
。如果您希望内部类的实例拥有对外部类实例的引用,则必须将其显式声明:
class Master {
var test = 2;
class Nested{
init(master: Master) {
let example = master.test;
}
}
func f() {
// Nested is in scope in the body of Master, so this works:
let n = Nested(master: self)
}
}
var m = Master()
// Outside Master, you must qualify the name of the inner class:
var n = Master.Nested(master:m)
// This doesn't work because Nested isn't an instance property or function:
var n2 = m.Nested()
// This doesn't work because Nested isn't in scope here:
var n3 = Nested(master: m)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)