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。将所有需要的函数也放在扩展中。