ios – 如何在Swift中正确转换为子类?

前端之家收集整理的这篇文章主要介绍了ios – 如何在Swift中正确转换为子类?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有许多不同单元格的UITableView,基于数据源内容数组中的内容,它们应该显示自定义内容.
func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell : UITableViewCell? = nil
        let objectAtIndexPath: AnyObject = contentArray![indexPath.row]

        if let questionText = objectAtIndexPath as? String {
            cell = tableView.dequeueReusableCellWithIdentifier("questionCell",forIndexPath: indexPath) as QuestionTableViewCell
            cell.customLabel.text = "test"
        }

        return cell!
    }

在这里我得到了错误

UITableViewCell没有属性customLabel

QuestionTableViewCell有哪些.我的演员到QuestionTableViewCell有什么问题?

解决方法

问题不是你的演员,而是你的细胞宣言.您将其声明为可选的UITableViewCell,并且该声明永远保留 – 并且是编译器所知道的全部内容.

因此,您必须在调用customLabel时进行强制转换.而不是这个:

cell.customLabel.text = "test"

你需要这个:

(cell as QuestionTableViewCell).customLabel.text = "test"

你可以通过声明一个不同的变量来让自己变得更容易(因为你知道在这种特殊情况下你的单元格将是一个QuestionTableViewCell),但只要你只有一个变量,单元格,你将不得不经常演员无论你认为它真的会是什么课程.就个人而言,我会写一些更像这样的东西,完全是为了避免重复投射:

if let questionText = objectAtIndexPath as? String {
        let qtv = tableView.dequeueReusableCellWithIdentifier("questionCell",forIndexPath: indexPath) as QuestionTableViewCell
        qtv.customLabel.text = "test"
        cell = qtv
    }

猜你在找的iOS相关文章