如何在Swift中为泛型类生成单例
我需要为Swift中的泛型类创建一个单例,但是Swift中的泛型类不支持静态存储属性,那么这个方法无效如何在Swift中为泛型类生成单例,swift,generics,singleton,Swift,Generics,Singleton,我需要为Swift中的泛型类创建一个单例,但是Swift中的泛型类不支持静态存储属性,那么这个方法无效 public final class ApiClient<T>: ApiClientFor<T> where T:EntityType { // Method 1 class var shared: ApiClient<T> { struct Static {
public final class ApiClient<T>: ApiClientFor<T> where T:EntityType {
// Method 1
class var shared: ApiClient<T> {
struct Static {
static let instance = ApiClient<T>()
}
return Static.instance
}
//Or more simple Method 2
static let instance = ApiClient<T>()
}
public final类ApiClient:apiclientforwhere T:EntityType{
//方法1
类var共享:ApiClient{
结构静态{
静态let实例=ApiClient()
}
返回Static.instance
}
//或者更简单的方法2
静态let实例=ApiClient()
}
这里的基本问题是,您正在创建一个完整的单例家族(每个参数化类型一个),每个单例都需要存储(或引用)静态上下文。单例需要根据存储的类型进行索引
我建议创建一个单独的全局字典,在其中存储您的单例,并通过其类型的字符串描述进行索引:
var singletons_store : [String, AnyObject]
然后在计算的shared
变量中,在该存储中查找对应于参数化类型的单例:
class var shared : APIClient<T> {
let store_key = String(describing: T.self)
if let singleton = singletons_store[store_key] {
return singleton as! APIClient<T>
} else {
let new_singleton = APIClient<T>()
singleton_store[store_key] = new_singleton
return new_singleton
}
}
class-var-shared:APIClient{
let store_key=String(描述:T.self)
如果让singleton=singleton\u存储[store\u key]{
将单例返回为!APIClient
}否则{
让new_singleton=APIClient()
单件存储[存储密钥]=新单件
返回新单例
}
}
可能的重复,