Swift:Property' self.tableView'没有在super.init调用初始化

时间:2017-08-06 17:34:47

标签: swift

我的Swift代码中有一个设计UICollectionViewCells

的课程
class PostCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource { 

    let tableView: UITableView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = .white

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellReuseIdentifier")
        tableView.delegate = self
        tableView.dataSource = self

        designCell()
    }
}

我需要在单元格中有UITableView,因此我添加了UITableViewDelegate, UITableViewDataSource个类,但这会让我返回错误

Property 'self.tableView' not initialized at super.init call 可能是什么问题以及如何初始化tableView?

2 个答案:

答案 0 :(得分:2)

根据初始化规则,必须在调用超类的init方法之前初始化所有存储的属性。将属性声明为隐式展开的可选项不会初始化该属性。

tableView声明为非可选项,并在super调用之前将其初始化

class PostCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource {

    let tableView: UITableView

    override init(frame: CGRect) {
        tableView = UITableView(frame: frame)
        super.init(frame: frame)
        backgroundColor = .white

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellReuseIdentifier")
        tableView.delegate = self
        tableView.dataSource = self

        designCell()
    }
}

答案 1 :(得分:1)

您需要创建并连接UITableView的插座或以编程方式创建

let tableView = UITableView(frame: yourFrame)