void函数表视图中的非void返回值

时间:2017-02-19 17:11:58

标签: ios swift

我有一个从解析中检索数据的函数,如果它是nil,那么表视图将呈现一个tableview单元格,但如果服务器有数据,那么它将呈现不同的表格视图单元格。但我必须声明一个返回函数,当我这样做时,我得到一个:

  

void函数中出现意外的非void返回值

我无法解决的错误。这是代码。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    if indexPath.row == 0 {




        // STEP 2. Find posts made by people appended to followArray
        let query = PFQuery(className: "CommercialUsers")
        query.addDescendingOrder("createdAt")
        query.findObjectsInBackground(block: { (objects, error) -> Void in
            if error == nil {
                let cell = tableView.dequeueReusableCell(withIdentifier: "cell2", for: indexPath as IndexPath) as! cell2
                cell.delegate = self
                return cell
                for object in objects! {
                    let cell = tableView.dequeueReusableCell(withIdentifier: "cell1", for: indexPath as IndexPath) as! cell1
                    cell.delegate = self
                    return cell
                }

            } else {
                print(error!.localizedDescription)
            }
        })

    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell1", for: indexPath as IndexPath) as! cell1
            cell.delegate = self
        return cell
    }
}

这是错误的图像 Error Image

1 个答案:

答案 0 :(得分:0)

欢迎来到SO。

您正在使用一个完成关闭的函数findObjectsInBackground。完成闭包是cellForRowAt函数中的另一个函数。该函数保留(捕获)您传入的完成闭包,并且在后台调用完成之前不会调用它。

您传入的块不会返回值。那就是

(objects, error) -> Void in

装置。它说“这个块需要2个参数,但不返回任何内容。”

你不能从完成闭包内部返回单元格。

相反,你要做的是调用findObjectsInBackground,然后,在它的块之外,完成配置单元格并返回它。

在findObjectsInBackground的完成闭包内,您应该使用tableView.cell(at:)从表视图中获取单元格,并将新获取的数据安装到单元格中。

编辑:

我刚注意到你的完成处理程序中有代码,它们通过返回的对象循环并创建多个单元格。这根本行不通。你需要重新考虑你的设计。

cellForRow(at:)函数必须获取,配置并返回单个单元格。在您的cellForRow(at:)函数返回之后,您正在使用的异步方法将无法完成,因此您需要返回没有正在加载的数据的单元格,然后将数据安装到完成时的单元格中处理程序。