将T转换为未知类型

时间:2017-05-05 09:28:42

标签: swift

假设我有一个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
    }
}

0 个答案:

没有答案