Swift guard语句用法

时间:2016-03-30 06:33:35

标签: swift2 guard-statement

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

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声明的用法?

1 个答案:

答案 0 :(得分:3)

文档很好地描述了

  

如果满足guard语句的条件,则继续执行代码   在guard语句的结束后。任何变量或常量   使用可选绑定作为一部分分配值   条件可用于guard的其余代码块   声明出现在。

     

如果不满足该条件,则else分支内的代码为   执行。 该分支必须转移控制以退出代码块   其中出现guard语句。它可以通过控件执行此操作   转移声明,例如return,break,continue或throw,或者它   可以调用不返回的函数或方法,例如   fatalError()

在您的特定情况下,您根本不需要guard语句,因为推荐的方法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
}