条件声明数组索引超出范围错误 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
括号之间的代码吗?
这不是条件声明的目的吗?
如果没有,我该如何防止这个错误?
您的 numberOfRowsInSection
和 numberOfSectionsInTableView
委托方法的实现可能没有报告正确的长度。这将导致 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
此外,您关于连接不良是一个问题的说法是正确的。如果那是您的数据源并且它依赖于依赖于网络请求(在后台线程上执行)的信息,则无法保证调用此方法时会填充数据源。
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
括号之间的代码吗?
这不是条件声明的目的吗?
如果没有,我该如何防止这个错误?
您的 numberOfRowsInSection
和 numberOfSectionsInTableView
委托方法的实现可能没有报告正确的长度。这将导致 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
此外,您关于连接不良是一个问题的说法是正确的。如果那是您的数据源并且它依赖于依赖于网络请求(在后台线程上执行)的信息,则无法保证调用此方法时会填充数据源。