我的代码是swift 3
并且在TableView
中创建了两个数组,将JSON数据转换为Array
,如果我映射这两个数组将得到错误索引超出范围,如何正确地图Array
?
func trainType() {
do {
/// 取得所有列車車種資料
let trainTypeUrl = URL(string: "http://ptx.transportdata.tw/MOTC/v2/Rail/TRA/TrainClassification?$format=JSON")
let trainTypeData = try? Data(contentsOf: trainTypeUrl!)
let trainTypeJson = try? JSONSerialization.jsonObject(with: trainTypeData!, options: .mutableContainers)
if let trainTypes = trainTypeJson as? [[String : AnyObject]] {
for dataTrainType in trainTypes {
trainTypeArray.append(dataTrainType as AnyObject)
}
}
}
self.tableView.reloadData()
}
func trainInOutstatusData() {
do {
let trainStatusUrl = URL(string: "http://ptx.transportdata.tw/MOTC/v2/Rail/TRA/LiveBoard?$format=JSON")
let trainInOutstatusData = try? Data(contentsOf: trainStatusUrl!)
let trainInOutStatusjson = try? JSONSerialization.jsonObject(with: trainInOutstatusData!, options: .mutableContainers)
if let InOutStatus = trainInOutStatusjson as? [[String : AnyObject]] {
for dataInOutStatus in InOutStatus {
trainStatusArray.append(dataInOutStatus as AnyObject!)
}
}
}
self.tableView.reloadData()
}
地图数组
let stationClassID = trainStatusArray[indexPath.row]["TrainClassificationID"] as? String
let trainClassID = trainTypeArray[indexPath.row]["TrainClassificationID"] as? String
if stationClassID == trainClassID {
if let trainTypeID = trainTypeArray[indexPath.row]["TrainClassificationID"] as? [String : Any] {
let ZHtw = trainTypeID["Zh_tw"] as? String
cell.stationTrainClassID.text = ZHtw
}
}
答案 0 :(得分:0)
由于您在两个阵列中都有不同的数据计数,因此您无法按照您的尝试进行操作。因为您认为trainStatusArray 5计数
let stationClassID = trainStatusArray[4]["TrainClassificationID"] as? String // You will get some value here.
let trainClassID = trainTypeArray[4]["TrainClassificationID"] as? String // Here app will crash because, total count is 3 in but you are trying to access element at index 4.
<强>解决方案:强>
您可以将具有较高计数的数组作为tableView
的数据源,然后您可以使用for loop
中的cellForRowAtIndexpath
来检查值是否匹配。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let stationClassID = trainStatusArray[indexPath.row]["TrainClassificationID"] as? String
for trainType in trainTypeArray {
let trainClassID = trainType["TrainClassificationID"] as? String
if stationClassID == trainClassID {
if let trainTypeID = trainTypeArray[indexPath.row]["TrainClassificationID"] as? [String : Any] {
let ZHtw = trainTypeID["Zh_tw"] as? String
cell.stationTrainClassID.text = ZHtw
}
}
}
}
感谢。