假设我有一个Foo类型的数组,其中包含FooBar对象。
Bar< T> class是一个继承自Foo的泛型类。
然后我有多个FooBar类,它们继承自Bar< T>,每个类都有不同的泛型类型。 (Bar< Int>,Bar< String>)。
问题是我需要遍历Foo类型的数组,检查na对象是否为Bar< T>类型,将其强制转换为Bar并设置它的属性。
Buty Swift不允许我施放到未知类型< T>和Bar< Any>与Bar< Int>不匹配或另一个......
我想出了两个可能的解决方案 - 将新类添加到继承自Foo并且是Bar的父级的层次结构中,但不是通用的,并且转换为此类或实现协议(这似乎是更好的解决方案)。
我真正不确定的是协议是否适用于此类内容。在C-like lang中,我可能会使用一个接口。
//编辑:示例代码
class Foo {
}
class Bar<T> : Foo {
var delegate : SomeDelegate
}
class FooBar: Bar<Int> {
}
class FooBar2: Bar<String> {
}
let arr : [Foo] = [ FooBar(), FooBar2(), Foo() ]
for item in arr {
// this is the problem - I need to match both String,Int or whathever the type is
if let b = item as? Bar<Any> {
b.delegate = self
}
}