ios - Swift 嵌套类属性

标签 ios swift

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)

关于ios - Swift 嵌套类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551374/

相关文章:

ios - 使用 swift 在 iOS 上以编程方式创建热点

objective-c - 如何在保留斯堪的纳维亚字母的同时一直为 SQLite 正确编码 NSString

ios - 我们如何在使用表达式值时使用 "context"(使用 :context:)?

iphone - 如何将 UIImage 转换为 NSData 或 CFDataRef?

ios - 多行导航栏标题

ios - 检测应用程序是否链接到CoreLocation框架

ios - 如何锁定异步函数,以便它等待第一次调用完成后再再次运行

swift - 为什么我的 UIImage 没有出现在我的 tabBar 中?

ios - 带有发布build设置的 Swift 动画完成错误

swift - NSVoiceLocaleIdentifier 的引用字符串在哪里?