如何在Swift中创建与泛型共存的单个类
我有一门课是这样的:如何在Swift中创建与泛型共存的单个类,swift,generics,singleton,Swift,Generics,Singleton,我有一门课是这样的: class Single { static let sharedInstance: Single = Single() ... } class Single<T: Hashable> { static let sharedInstance: Single = Single() var dic: [T: Any] = [:] // Here use the Generic } 但我想在这个类中使用泛型,如下所示: class S
class Single {
static let sharedInstance: Single = Single()
...
}
class Single<T: Hashable> {
static let sharedInstance: Single = Single()
var dic: [T: Any] = [:] // Here use the Generic
}
但我想在这个类中使用泛型,如下所示:
class Single {
static let sharedInstance: Single = Single()
...
}
class Single<T: Hashable> {
static let sharedInstance: Single = Single()
var dic: [T: Any] = [:] // Here use the Generic
}
单类{
静态let sharedInstance:Single=Single()
var dic:[T:Any]=[:]//这里使用泛型
}
我从Xcode得到这个结果
泛型类型中不支持静态存储属性
我已经在stackoverflow中搜索了这个错误,但是所有的答案都不适合我。像这个
我该如何解决这个问题呢?我想你只是想让一个单例能够在你的字典中存储任何可哈希键?如果是,请执行以下操作:
class Single {
static let sharedInstance: Single = Single()
var dic: [AnyHashable : Any] = [:]
}
Single.sharedInstance.dic["Grimxn"] = 1
Single.sharedInstance.dic[1] = "Grimxn"
Single.sharedInstance.dic // [1: "Grimxn", "Grimxn": 1] as required
我想你只是想让一个单身汉能够在你的字典中存储任何哈希键?如果是,请执行以下操作:
class Single {
static let sharedInstance: Single = Single()
var dic: [AnyHashable : Any] = [:]
}
Single.sharedInstance.dic["Grimxn"] = 1
Single.sharedInstance.dic[1] = "Grimxn"
Single.sharedInstance.dic // [1: "Grimxn", "Grimxn": 1] as required
可以使用静态计算属性声明泛型类型,如下所示:
class Single<T: Hashable> {
static var sharedInstance: Single? {
if self.sharedInstance != nil {
return self.sharedInstance
} else {
return Single()
}
}
var dic: [T: Any] = [:]
}
单类{
静态var sharedInstance:单个{
如果self.sharedInstance!=零{
返回自我共享状态
}否则{
返回单()
}
}
变量dic:[T:Any]=[:]
}
您可以使用静态计算属性声明泛型类型,如下所示:
class Single<T: Hashable> {
static var sharedInstance: Single? {
if self.sharedInstance != nil {
return self.sharedInstance
} else {
return Single()
}
}
var dic: [T: Any] = [:]
}
单类{
静态var sharedInstance:单个{
如果self.sharedInstance!=零{
返回自我共享状态
}否则{
返回单()
}
}
变量dic:[T:Any]=[:]
}
可能会将共享状态
设置为静态计算属性?是的,你是对的!但是为什么静态计算属性可以解决这个问题呢?它也是一个静态的单一实例。我不知道如何使用它。您是否打算有几个单例,每个哈希类型一个?如果是这样,您将如何实例化它们?static
没有“做”这些,因为它没有引用t
?或者你只是想让一个单例能够在你的字典中存储任何可散列键吗?也许让sharedInstance
成为一个静态计算属性?是的,你是对的!但是为什么静态计算属性可以解决这个问题呢?它也是一个静态的单一实例。我不知道如何使用它。您是否打算有几个单例,每个哈希类型一个?如果是这样,您将如何实例化它们?static
没有“做”这些,因为它没有引用t
?或者你只是希望一个单例能够在你的字典中存储任何可哈希键吗?以下是我的场景:我使用单例作为工具类,我希望有一个字典来存储一些实例,这些键是一种枚举。我想发送一个不确定的枚举键来获取一个实例,所以我使用Generic来匹配不确定的枚举。Hashable是字典的键必须是Hashable的。对不起,我尝试了你的建议,它也有效,但我认为Pranav Kasetti的建议更适合我。再谢谢你了!下面是我的场景:我使用Single作为工具类,我想用一个字典来存储一些实例,键是一种枚举。我想发送一个不确定的枚举键来获取一个实例,所以我使用Generic来匹配不确定的枚举。Hashable是字典的键必须是Hashable的。对不起,我尝试了你的建议,它也有效,但我认为Pranav Kasetti的建议更适合我。再谢谢你了!这将在每次访问var时创建一个新的单个实例。所以它不适合单例用例。@PranavKasetti谢谢,这确实有帮助,但我不知道为什么它会给我一个警告“通过这个函数的所有路径都将调用它自己”。有什么想法吗?每次访问var时,这会创建一个新的单例。所以它不适合单例使用。@PranavKasetti谢谢,这真的很有帮助,但我不知道为什么它会给我一个警告“通过这个函数的所有路径都会调用它自己”,有什么想法吗?