swift没有嵌套类吗??
例如,我似乎无法从嵌套类访问master类的属性测试.
class master{
var test = 2;
class nested{
init(){
let example = test; //this doesn't work
}
}
}
swift没有嵌套类吗??
例如,我似乎无法从嵌套类访问master类的属性测试.
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)