1

根据我对guardswift 语句的理解,我正在执行以下操作:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let identifier = "identifier"
    let dequeCell = tableView.dequeueReusableCellWithIdentifier(identifier)

    guard let cell = dequeCell else
    {
        // The following line gives error saying: Variable declared in 'guard'condition is not usable in its body
        cell = UITableViewCell(style: .Default, reuseIdentifier: identifier)
    }

    cell.textLabel?.text = "\(indexPath.row)"

    return cell
}

我只是想了解我们可以在guard语句中创建一个变量并在函数的其余部分中访问它吗?还是保护语句旨在立即返回或抛出异常?

还是我完全误解了guard语句的用法?

4

1 回答 1

4

该文档很好地描述了它

如果满足guard语句的条件,则在guard语句的右大括号之后继续执行代码。使用可选绑定作为条件的一部分分配值的任何变量或常量都可用于该guard 语句所在的代码块的其余部分。

如果不满足该条件,则执行 else 分支中的代码。该分支必须转移控制权以退出出现该guard语句的代码块。它可以使用诸如 return、break、continue 或 throw 之类的控制转移语句来执行此操作,也可以调用不返回的函数或方法,例如 fatalError()

在您的特定情况下,您根本不需要保护语句,因为推荐的方法dequeueReusableCellWithIdentifier:forIndexPath:总是返回非可选类型。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let identifier = "identifier"
    let dequeCell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath)
    cell.textLabel?.text = "\(indexPath.row)"
    return cell
}
于 2016-03-30T06:39:13.280 回答