快速创建通用变量字典

乔纳森锅

我正在寻找一种在字典中存储泛型子类的方法,但我遇到了问题。

在下面的示例中,我试图创建一个我知道将子类化的对象字典Entity<T>我成功地存储我的子类的单个实例FloatEntity,并StringEntityEntity类型变种,但是当我尝试在同一存储类型的词典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”

谁能建议我如何使用字典来存储这样的泛型?

瓦瓦马

variable1variable2不是类型,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章