在swift

时间:2016-05-19 11:03:17

标签: ios swift class

我有两个课程:ClassAClassB

ClassA是一个单身,如下所示:

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

    private (set) var classB = ClassB()       

    init() {     
    }    
}

ClassA只能初始化ClassB,效果很好。我的ClassB看起来像这样:

class ClassB {

    init() {

    }   
}

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

class ClassC {
   private var classB = ClassB()
}

如何强制执行此行为?

2 个答案:

答案 0 :(得分:2)

你可以让B组成为A中的私人类,如下所示:

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() {
        }
    }
}

答案 1 :(得分:0)

在ClassB中创建所需的init。保持和参数为AnyObject,它是调用者。即分配时,ClassB将自己从您分配的类传递给调用者。

在必需的init内部,检查调用者是否为KeyOfClass ClassA。如果是类,则调用init()或super.init()否则返回nil。