转换为在运行时确定的类

时间:2016-08-01 11:06:33

标签: ios swift casting

我想知道如何将对象强制转换为仅在运行时确定的类。

让我们举个例子:

let xClasses = [ClassA.self, ClassB.self]
let xClass = xClasses[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! xClass

所以基本上,我有一个类数组,并希望在运行时选择其中一个进行转换(在本例中,是一个UITableViewCell的对象)。

(上面的代码不起作用) 我如何实现这一目标?

注意:我使用此代码作为示例,我的问题不仅仅是UITableViewCell。 感谢。

1 个答案:

答案 0 :(得分:1)

我的项目中有类似的东西。我用一个开关盒来处理它。像这样:

switch xClass {
case is ClassA:
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ClassACell
case is ClassB:
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ClassBCell
}

您很可能也需要default:

在运行时确定的类型信息实际上称为Existentials。您可以在此博客post中阅读更多信息。在swift2中,如果您不想使用开关盒,则必须使用协议。