我正在寻找一种在字典中存储泛型子类的方法,但我遇到了问题。
在下面的示例中,我试图创建一个我知道将子类化的对象字典Entity<T>
。我成功地存储我的子类的单个实例FloatEntity
,并StringEntity
在Entity
类型变种,但是当我尝试在同一存储类型的词典Dictionary<String, Entity>
我得到一个错误。
class Entity<T> {
var _value: T
var value: T { get { return _value } set {_value = newValue}}
init (defaultValue: T) {
_value = defaultValue
}
}
class FloatEntity: Entity<Float> {
}
class StringEntity: Entity<String> {
}
func run () {
let variable1: Entity = FloatEntity (defaultValue: 1)
let variable2: Entity = StringEntity (defaultValue: "")
var dictionary: Dictionary<String, Entity> = [
"One": FloatEntity (defaultValue: 1),
"Two": StringEntity (defaultValue: ""),
]
print (variable1)
print (variable2)
print (dictionary)
}
错误:
无法将“FloatEntitiy”类型的值转换为预期的字典值类型“Entity”
谁能建议我如何使用字典来存储这样的泛型?
variable1
和variable2
不是类型,Entity
但实际上是Entity<Float>
和Entity<String>
这是两种不相关的类型。使用 aprotocol
将它们联合起来:
protocol EntityProtocol { }
class Entity<T> : EntityProtocol {
var _value: T
var value: T { get { return _value } set {_value = newValue}}
init (defaultValue: T) {
_value = defaultValue
}
}
class FloatEntity: Entity<Float> {
}
class StringEntity: Entity<String> {
}
func run () {
let variable1: Entity = FloatEntity (defaultValue: 1)
let variable2: Entity = StringEntity (defaultValue: "")
var dictionary: Dictionary<String, EntityProtocol> = [
"One": FloatEntity (defaultValue: 1),
"Two": StringEntity (defaultValue: ""),
]
print (variable1)
print (variable2)
print (dictionary)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句