单例关闭修改开放扩展
Singleton closed for modification open to extend
我想知道如何实现:
假设我有一个单身人士 class as
class Global{
static let shared = Global()
private init(){}
}
我希望此 class 禁止修改。但开放扩展。
我想达到这样的结果
Global.shared.var1
当 var1
来自另一个 class 以某种方式扩展 Global
。
这是一个愿望。有可能吗?实现这一目标的正确方法是什么。
找到了一个暂时符合我目的的 hack(建议我更好的 way/alternate):
class Students{
static let shared = Students()
private init(){}
var name: [String] = ["Farhan","Hasan","Saba","Fatima"]
}
class Teachers{
static let shared = Teachers()
private init(){}
var name: [String] = ["Mr. Riaz","Ms. Ayesha"]
}
//Base for Singleton, sort of proxy
class Global{
private init(){}
}
//Somewhere else in your project
extension Global{
static let students = Students.shared
}
//Somewhere else in your project
extension Global{
static let teachers = Teachers.shared
}
//Apparently it served the purpose
print(Global.students.name) //prints: ["Farhan", "Hasan", "Saba", "Fatima"]
print(Global.teachers.name) //prints: ["Mr. Riaz", "Ms. Ayesha"]
我想知道如何实现: 假设我有一个单身人士 class as
class Global{
static let shared = Global()
private init(){}
}
我希望此 class 禁止修改。但开放扩展。
我想达到这样的结果
Global.shared.var1
当 var1
来自另一个 class 以某种方式扩展 Global
。
这是一个愿望。有可能吗?实现这一目标的正确方法是什么。
找到了一个暂时符合我目的的 hack(建议我更好的 way/alternate):
class Students{
static let shared = Students()
private init(){}
var name: [String] = ["Farhan","Hasan","Saba","Fatima"]
}
class Teachers{
static let shared = Teachers()
private init(){}
var name: [String] = ["Mr. Riaz","Ms. Ayesha"]
}
//Base for Singleton, sort of proxy
class Global{
private init(){}
}
//Somewhere else in your project
extension Global{
static let students = Students.shared
}
//Somewhere else in your project
extension Global{
static let teachers = Teachers.shared
}
//Apparently it served the purpose
print(Global.students.name) //prints: ["Farhan", "Hasan", "Saba", "Fatima"]
print(Global.teachers.name) //prints: ["Mr. Riaz", "Ms. Ayesha"]