我需要在 Swift 中为泛型类创建一个单例,但 Swift 中的泛型类不支持静态存储属性,因此该方法无效
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>()
}
最佳答案
这里的根本问题是您要创建一整套单例(每个参数化类型一个),并且每个单例都需要存储(或引用)静态上下文。并且单例需要按它们存储的类型进行索引。
我建议创建一个单一的全局字典来存储你的单例,由它们类型的字符串描述索引:
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
}
}
关于swift - 如何在 Swift 中为泛型类创建单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43849462/