【发布时间】:2014-08-12 20:10:58
【问题描述】:
我想在字典中存储从泛型类型派生的类的实例;也就是说,字典应该存储从这个泛型派生的 any 类的一个实例。
类似这样的:
class ParentClass {}
class ChildClass: ParentClass {}
class GenericClass<T: ParentClass> {
var foo:T?
}
typealias DerivedClass = GenericClass<ChildClass>
class TestGenerics {
var dict: Dictionary<String, GenericClass<**what goes here??**>> = [:]
func test() {
var derivedClassInstance = DerivedClass()
dict.updateValue(derivedClassInstance, forKey: "name")
}
}
这在 Java 中相当简单:
public class TestGenericsOuter {
class ParentClass {}
class ChildClass extends ParentClass {}
class GenericClass<T extends ParentClass> {
T foo;
}
class DerivedClass extends GenericClass<ChildClass> {}
class TestGenerics {
Dictionary<String, GenericClass<? extends ParentClass>> dict;
void test() {
DerivedClass derivedClassInstance = new DerivedClass();
dict.put("name", derivedClassInstance);
}
}
}
这样的事情在 Swift 中是否可行?我让它工作的唯一方法是创建一个以“Any”作为值类型的字典。但是,我失去了一些类型安全性,所以我想尽可能避免这种解决方案。
【问题讨论】:
-
对——这就是我的意思:我可以使用带有 Any 作为值类型的字典。 (我猜是我把尖括号和解析器吃掉了)。我想使用更具体的类型限制,这样我就不需要从字典中转换出所有内容。