Ios 在swift中管理类范围

Ios 在swift中管理类范围,ios,swift,class,Ios,Swift,Class,我有两门课:ClassA和ClassB ClassA是一个看起来像这样的单例: class ClassA { class var sharedInstance: ClassA { struct Singleton { static let instance = ClassA() } return Singleton.instance } private (set) var classB = Clas

我有两门课:
ClassA
ClassB

ClassA
是一个看起来像这样的单例:

class ClassA {
    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }

    private (set) var classB = ClassB()       

    init() {     
    }    
}
class ClassB {

    init() {

    }   
}
class ClassC {
   private var classB = ClassB()
}
class ClassA {
    private var classB = ClassB()  
    private class ClassB{
         init() {
        }
    }

    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }      

    init() {            
    }        
}
ClassA
只能初始化
ClassB
,这可以正常工作。我的
ClassB
如下所示:

class ClassA {
    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }

    private (set) var classB = ClassB()       

    init() {     
    }    
}
class ClassB {

    init() {

    }   
}
class ClassC {
   private var classB = ClassB()
}
class ClassA {
    private var classB = ClassB()  
    private class ClassB{
         init() {
        }
    }

    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }      

    init() {            
    }        
}
现在我希望
ClassB
只能由
ClassA
访问,而不能由项目中的任何其他类访问。例如,
ClassC
不能像这样初始化
ClassB

class ClassA {
    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }

    private (set) var classB = ClassB()       

    init() {     
    }    
}
class ClassB {

    init() {

    }   
}
class ClassC {
   private var classB = ClassB()
}
class ClassA {
    private var classB = ClassB()  
    private class ClassB{
         init() {
        }
    }

    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }      

    init() {            
    }        
}

如何强制执行此行为?

您可以将类B设置为a中的私有类,如下所示:

class ClassA {
    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }

    private (set) var classB = ClassB()       

    init() {     
    }    
}
class ClassB {

    init() {

    }   
}
class ClassC {
   private var classB = ClassB()
}
class ClassA {
    private var classB = ClassB()  
    private class ClassB{
         init() {
        }
    }

    class var sharedInstance: ClassA {
        struct Singleton {
            static let instance = ClassA()
        }
        return Singleton.instance
    }      

    init() {            
    }        
}
更新

如果您有许多这样的类,您可以为每个需要的依赖项创建扩展:

extension ClassA {
    private class ClassC {
        init() {
        }
    }
}

在类B中创建所需的init。将和参数保留为调用方的任意对象。i、 e在分配类B时,将self从正在分配的类传递给调用者


在required init中,检查调用方是否是ClassA类的kindof。如果是类a,则调用init()或super.init(),否则返回nil。

请不要。您不需要定义
结构来创建
单例类。看看这个
ClassA{static let sharedInstance=ClassA()}
你也应该让singleton的初始化器privatenice解决方案很好,但假设我有很多提供不同功能的类,那么我的ClassA将变成一团乱麻,最终包含很多代码。如果将ClassB声明为的扩展,我不能在ClassB中使用基类ClassA变量ClassA@hariszaman通常您只能在扩展中使用ClassC。将所有需要的函数也放在扩展中。