gpt4 book ai didi

swift - 如何在 Swift 中为泛型类创建单例

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:57 24 4
gpt4 key购买 nike

我需要在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com