Arrays 错误原因:致命错误:数组索引超出范围?[快速]

Arrays 错误原因:致命错误:数组索引超出范围?[快速],arrays,json,swift,alamofire,Arrays,Json,Swift,Alamofire,请在下图中查找错误位置: tripOption中的值数量将在每个请求中更改 例如,tripOption仅输出2个值的代码中存在逻辑问题。。但循环继续,并表示数组超出索引。。我不知道如何解决这个问题 var arrayOfFlights : [FlightDataModel] = [FlightDataModel]() if json != nil { //insert airline data into arrayOfFlights

请在下图中查找错误位置:

tripOption中的值数量将在每个请求中更改

例如,tripOption仅输出2个值的代码中存在逻辑问题。。但循环继续,并表示数组超出索引。。我不知道如何解决这个问题

 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个存在。那么也许某个地方出了问题?有没有办法改变逻辑请不要破坏你的帖子;这对那些努力回答你问题的人是不公平的。