条件声明数组索引超出范围错误 Swift

Array index out of range error on conditional declaration Swift

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    if let getimURL = newslists[indexPath.section][indexPath.row].imageURL as String?{

        if getimURL != "None"{
            return 230.0
        };  return 70.0


    }else{
        return 70.0
    }
}

当我连接不好时经常出现错误,可能导致 newslists 数组填充速度太慢,

反正索引越界错误指的是行

if let getimURL = newslists[indexPath.section][indexPath.row].imageURL as String?{

我的问题是,如果这一行有问题,程序 运行 不应该是 else 括号之间的代码吗?

这不是条件声明的目的吗?

如果没有,我该如何防止这个错误?

您的 numberOfRowsInSectionnumberOfSectionsInTableView 委托方法的实现可能没有报告正确的长度。这将导致 table 视图提供超出数组范围的索引路径。您可能应该为 numberOfRowsInSection 返回 newslists[section].length,为 numberOfSectionsInTableView 返回 newslists.length

条件声明的重点,但这不是数组索引在Swift中的完成方式。但是,添加您自己的功能非常简单:

extension CollectionType where Index : ForwardIndexType, Index : Comparable {
  subscript (safe index: Index) -> Generator.Element? {
    return indices ~= index ? self[index] : nil
  }
}

let jo = [1, 2, 3, 4, 5]

jo[safe: 2] // 3?

(我从 here 得到的)

这里的问题是你现在有一个双重可选。要解决这个问题,您需要可选的链接:

if let getimURL = newslists[safe: indexPath.section]?[safe: indexPath.row]?.imageURL.flatMap({ [=11=] as? String }) {

一切顺利!

看来你无论如何都要返回70?

if getimURL != "None"{
        return 230.0
    };  return 70.0 //Right here!!


}else{
    return 70.0
}

不应该是...吗?

if getimURL != "None"{
    return 230.0
}else{
    return 70.0
}

if let 声明的目的是解包 String? 可选。错误是在访问数组时假设 newslists[indexPath.section][indexPath.row] 存在而不是检查它。试试

if newslists.count > indexPath.section {
   if newslists[indexPath.section].count > indexPath.row {
      if let getimURL = newslists[indexPath.section][indexPath.row].imageURL as? String {
          if getimURL != "None"{
             return 230.0 
          }
      }
   }
} 
return 70.0

此外,您关于连接不良是一个问题的说法是正确的。如果那是您的数据源并且它依赖于依赖于网络请求(在后台线程上执行)的信息,则无法保证调用此方法时会填充数据源。