我有两个课程:ClassA
和ClassB
。
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()
}
如何强制执行此行为?
答案 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。