Arrays 错误原因:致命错误:数组索引超出范围?[快速]
请在下图中查找错误位置: tripOption中的值数量将在每个请求中更改 例如,tripOption仅输出2个值的代码中存在逻辑问题。。但循环继续,并表示数组超出索引。。我不知道如何解决这个问题Arrays 错误原因:致命错误:数组索引超出范围?[快速],arrays,json,swift,alamofire,Arrays,Json,Swift,Alamofire,请在下图中查找错误位置: tripOption中的值数量将在每个请求中更改 例如,tripOption仅输出2个值的代码中存在逻辑问题。。但循环继续,并表示数组超出索引。。我不知道如何解决这个问题 var arrayOfFlights : [FlightDataModel] = [FlightDataModel]() if json != nil { //insert airline data into arrayOfFlights
var arrayOfFlights : [FlightDataModel] = [FlightDataModel]()
if json != nil {
//insert airline data into arrayOfFlights
if let myJSON = json as? [String:AnyObject] {
if let trips = myJSON["trips"] as? [String:AnyObject] {
if let data = trips["data"] as? [String:AnyObject] {
if let carriers = data["carrier"] as? [[String:String]] {
for (index, carrierName) in enumerate(carriers) {
var myFlight = FlightDataModel(airline: carrierName["name"] as String!, price:nil)
self.arrayOfFlights.append(myFlight)
println("\(self.arrayOfFlights[index].airline!)")
}
}
}
if var tripOptions = trips["tripOption"] as? [[String:String]] {
for (index, tripOption) in enumerate(tripOptions) {
self.arrayOfFlights[index].price = tripOption["saleTotal"] as String!
println("price \(self.arrayOfFlights[index].price!)")
}
}
}
}
url jsjon请求中的参数:
var parameters = [
"request": [
"slice": [
[
"origin": from,
"destination": to,
"date": when
]
],
"passengers": [
"adultCount": 1,
"infantInLapCount": 0,
"infantInSeatCount": 0,
"childCount": 0,
"seniorCount": 0
],
"solutions": 5,
"refundable": false
]
]
错误是因为您试图访问
arrayOfFlights
中索引大于其size-1
的元素
// index > no of existing elements in the array
self.arrayOfFlights[index].price = tripOption["saleTotal"] as String!
也许您正试图将新元素推入一个空数组中
self.arrayOfFlightPrices.append(tripOption["saleTotal"] as String!)
您应该简化代码,也许可以使用结果的第一次迭代来确保您不会越界。大概是这样的:
var arrayOfFlights : [FlightDataModel] = [FlightDataModel]()
if let data = json as? NSDictionary {
if let carriers = data.valueForKeyPath("trips.data.carrier") as? NSArray {
for (index, carrier) in enumerate(carriers) {
var myFlight = FlightDataModel(airline: carrier["name"] as String!, price:nil)
arrayOfFlights.append(myFlight)
}
}
if let trips = data.valueForKey("trips") as? NSArray where arrayOfFlights.count > 0 {
for (index, carrier) in enumerate(arrayOfFlights) {
carrier.price = trips.objectAtIndex(index)["saleTotal"] as String!
}
}
}
请参见编辑。当大小在每次请求时更改时,如何将其更改为仅访问其大小。。。有时tripOption有3个值,有时有10个值。它取决于请求。for循环只会持续到它迭代
tripOptions
数组中的所有值为止。arrayOfFlights
的大小有那么大吗?不是很大。但tripOptions没有设定值。对于每个请求,该值可能包含3个值或5个值,或最多包含120Hey Mikael的任何值。我编辑了代码,以显示json数据在数据结构中的完整操作。你现在觉得怎么样?好的,我明白了。看起来您可以从数据[“承运人”]
获得多个航班。但是这个航班的数量少于tripOptions的数量。您确定JSON应该为每个运营商设置一个tripOption
?或者是否有其他方法来映射运营商选择。也许是钥匙?如果您可以打印Json,每个tripOption可能都有一些键?示例输出:Jetstar Airways Pty Limited Virgin Australia International Airlines价格AUD126.22价格AUD135.22致命错误:数组索引超出范围在Json请求中,我硬编码Json,仅给出5个解决方案。。这里请求只输出2,因为只有2个存在。那么也许某个地方出了问题?有没有办法改变逻辑请不要破坏你的帖子;这对那些努力回答你问题的人是不公平的。