Swift-如何在if语句之外获取常量

时间:2019-04-28 15:01:10

标签: ios swift

我的意图是为动态UITableViewCells创建不同的UITableView。我已经设置好单元格,我只需要添加一些逻辑即可显示哪个单元格。

我决定使用if语句返回单元格。某种程度上,这会造成错误,因为func tableView也需要返回'cell'并且if语句之外的代码无法访问let cell = ..

我该如何解决这个问题?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let date = dateArray[indexPath.row]
        let title = titleArray[indexPath.row]
        let desc = descArray[indexPath.row]

        if notificationType == 1 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "TuvTavleViewCell") as! TuvTableViewCell

            return cell
        } else {
            let cell = tableView.dequeueReusableCell(withIdentifier: "NotificationViewCell") as! NotificationViewCell

            return cell
        }

        cell.setTitle(title: title)
        cell.setDesc(desc: desc)
        cell.setDate(date: date)

        return cell
    }

2 个答案:

答案 0 :(得分:2)

好吧,你要问的是

  

如何在if语句之外获取常量的访问权限?

由于scope修饰符,这实际上是不可能的,在退出任何类型的闭包时声明的任何内容都会失去其范围。

因此,您不能从该语句中访问if语句中声明的任何内容。

针对您的案例,现在如何解决当前问题,您有两个选择。

您可以在cell中声明每个if,也可以在情况下对其进行处理。

您甚至可以通过应用一些协议将其提升到另一个层次,为此,我将向您展示一个简单的示例。

首先,您需要此protocol,并需要在自定义单元格类中进行确认,

   protocol ConfigurableCell {
    func set(title: String)
    func set(desc: String)
    func set(date: Date)
   }

确认class TuvTableViewCell: ConfigurableCellclass NotificationViewCell: ConfigurableCell

然后您可以执行以下操作。

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let date = dateArray[indexPath.row]
    let title = titleArray[indexPath.row]
    let desc = descArray[indexPath.row]
    var cell: ConfigurableCell

    if notificationType == 1  {
         cell = tableView.dequeueReusableCell(withIdentifier: "TuvTavleViewCell") as! ConfigurableCell

    } else {
         cell = tableView.dequeueReusableCell(withIdentifier: "NotificationViewCell") as! ConfigurableCell
    }
    cell.set(date: date)
    cell.set(desc: desc)
    cell.set(title: title)
}

如您所见,这将使我可以在if之外使用这些函数,但是根据您的问题的答案,我仍然没有在cell内声明if,它是之前宣布的。

答案 1 :(得分:0)

您需要

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let date = dateArray[indexPath.row]
    let title = titleArray[indexPath.row]
    let desc = descArray[indexPath.row]

    if notificationType == 1 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TuvTavleViewCell") as! TuvTableViewCell
        cell.setTitle(title: title)
        cell.setDesc(desc: desc)
        cell.setDate(date: date)
        return cell
    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "NotificationViewCell") as! NotificationViewCell
        cell.setTitle(title: title)
        cell.setDesc(desc: desc)
        cell.setDate(date: date)
        return cell
    }

}

还要考虑在单元格类中包含一个configure方法并将模型传递给它,而不是具有3个数组,而要考虑具有像这样的struct模型

struct Item {
   let title,desc,date:String
}