J'ai une réponse JSON dont je dois analyser la réponse. J'écris les éléments simples dans un tableau appelé courseDataArray
en utilisant un for loop
. Après cela, je veux écrire ce tableau nouvellement créé dans un autre tableau appelé combinedCourseArray
dans le but de le transmettre à un UITableView
. Créer le premier tableau semble bien fonctionner.
Mais comment puis-je créer un autre tableau combinedCourseArray
qui contient tous les tableaux de type courseDataArray
?
for (index, element) in result.enumerate() {
// get one entry from the result array
if let courseEntry = result[index] as? [String:AnyObject]{
//work with the content of the array
let courseName = courseEntry["name"]
let courseType = courseEntry["course_type"]
let courseDate = courseEntry["cor_date"]
let courseId = courseEntry["cor_id"]
let duration = courseEntry["duration"]
let schoolId = courseEntry["sco_id"]
let status = courseEntry["status"]
let courseDataArray = ["courseName" : courseName, "courseType": courseType, "courseDate": courseDate, "courseId": courseId, "duration": duration, "schoolId":schoolId, "status":status]
print(courseDataArray)
var combinedCourseArray: [String: AnyObject] = [:]
combinedCourseArray[0] = courseDataArray //does not work -- error: cannot subscript a value of type...
// self.shareData.courseStore.append(scooter)
}
Vous devez déplacer la déclaration CombinedCourseArray en dehors du tableau. Ce devrait être var combinedCourseArray: [[String: AnyObject]] = [[:]]
puisqu'il s'agit d'un tableau et non d'un dictionnaire.
Et tu devrais faire
combinedCourseArray.append(courseDataArray)
au lieu de
combinedCourseArray[0] = courseDataArray
var FirstArray = [String]()
var SecondArray = [String:AnyObject]()
FirstArray.append(contentsOf: SecondArray.value(forKey: "key") as! [String])
Commencez par déclarer ce tableau combinedCourseArray
à l'extérieur de cette boucle
var combinedCourseArray: [[String: AnyObject]] = [[String: AnyObject]]()
for (index, element) in result.enumerate() {
// get one entry from the result array
if let courseEntry = result[index] as? [String:AnyObject]{
//work with the content of the array
let courseName = courseEntry["name"]
let courseType = courseEntry["course_type"]
let courseDate = courseEntry["cor_date"]
let courseId = courseEntry["cor_id"]
let duration = courseEntry["duration"]
let schoolId = courseEntry["sco_id"]
let status = courseEntry["status"]
let courseDataArray = ["courseName" : courseName, "courseType": courseType, "courseDate": courseDate, "courseId": courseId, "duration": duration, "schoolId":schoolId, "status":status]
print(courseDataArray)
combinedCourseArray.append(courseDataArray) //does not work -- error: cannot subscript a value of type...
// self.shareData.courseStore.append(scooter)
}
}
Utilisez simplement flatMap
sur le tableau extérieur pour traduire un tableau en un autre, en supprimant éventuellement certains éléments:
let courseDataArray : [[String:AnyObject?]] = result.flatMap {
guard let courseEntry = $0 as? [String:AnyObject] else {
return nil
}
return [
"courseName" : courseEntry["name"],
"courseType": courseEntry["course_type"],
"courseDate": courseEntry["cor_date"],
"courseId": courseEntry["cor_id"],
"duration": courseEntry["duration"],
"schoolId": courseEntry["sco_id"],
"status": courseEntry["status"]
]
}
Bien sûr, la protection n'est pas vraiment nécessaire car le type d'entrée est probablement déjà [[String:AnyObject]]
et comme vous ne pouvez plus avoir d'échec interne, vous pouvez simplement utiliser map
au lieu de flatMap