【问题标题】:Any problem when I declare a class inside another class?当我在另一个类中声明一个类时有什么问题吗?
【发布时间】:2021-05-15 21:39:18
【问题描述】:

我有点困惑如果当我使用Swift 编程语言声明如下类时发生任何与内存相关的问题,主要目的是减少实时编译过程。因为如果我在全局范围内声明只在一个类中使用的类,我的系统会变得非常慢。

  class Person {
    private var edu: Education? //network sync
    let name: String
    init(name: String) {
        self.name = name
    }
    private class Education { }
}

这里我使用了上面的类person

class SectionA {
    let amy: Person = .init(name: "Amy")
    let rachel: Person = .init(name: "Rachel")
    let sarah: Person = .init(name: "Sarah")
    let jack: Person = .init(name: "Jack")
}

我担心的是Education 的班级。上面的类Person 是否可以比在Person 之外声明类Education 占用更多的进程或内存,如下所示?

class Person {
    private var edu: Education?
    let name: String
    
    init(name: String) {        
        self.name = name
    }
}

class Education { }

谢谢!

【问题讨论】:

  • "主要目的是减少实时编译过程。因为如果我全局声明只在一个类中使用的类,我的系统会变得非常慢。" - 我认为您对编译器的工作方式有错误的想法。当你编译这样的嵌套类或者你只是在全局范围内编译它们时,它没有任何区别。
  • @Enigmativity 抱歉,我应该提到private class Education(问题已更新)。会影响吗?

标签: swift class object oop


【解决方案1】:

按照您的方式将类放入类中只会产生一个影响:它会更改嵌套类的命名。它现在不是 Module.Education,而是 Module.Person.Education。

这对于组织事物很有用。如果 Eduction 只能适用于 Person,那么您可能希望将这些概念聚集在一起并防止 Education 污染顶级名称空间。除此之外,它没有任何影响。它对能见度没有影响。它对访问控制没有影响。

鉴于您的评论“主要目的是减少实时编译过程”,这没有重要影响。它可能会略微增加或减少特定代码库的编译时间,但差异是不可预测的并且可能很小。在类内部和外部将其标记为私有将完全没有影响(将其标记为私有通常影响很小,因为编译器非常擅长在适当的时候将其标记为私有)。

【讨论】:

    【解决方案2】:

    我相信您正在寻找的是创建一个继承主类所有属性的子类。

    据我了解,它应该如下所示:

    class Person{
        
    
        var edu: Education? //network sync
        
        let name: String
        
        init(name: String) {
        
            self.name = name
        }
        
    }
    
    class Education: Person {
    
    
    //insert info here
    
    }
    

    【讨论】:

    • 抱歉造成误会。我刚刚展示了一个示例。但原程序在 iOS 平台上看起来确实不同。问题已更新。请看,我将只在Person 中使用Education 类。那么,我可以在 Person 类内部声明私有修饰符,而不是像你那样在外部声明吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    相关资源
    最近更新 更多