我想知道如何将对象强制转换为仅在运行时确定的类。
让我们举个例子:
let xClasses = [ClassA.self, ClassB.self]
let xClass = xClasses[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! xClass
所以基本上,我有一个类数组,并希望在运行时选择其中一个进行转换(在本例中,是一个UITableViewCell的对象)。
(上面的代码不起作用) 我如何实现这一目标?
注意:我使用此代码作为示例,我的问题不仅仅是UITableViewCell
。
感谢。
答案 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中,如果您不想使用开关盒,则必须使用协议。