根据我对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
声明的用法?
答案 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
}