2016-07-27 4 views
4

У меня есть ответ JSON, ответ на который я должен разобрать. Я пишу отдельные элементы в массив courseDataArray, используя for loop. После этого я хочу записать этот вновь созданный массив в другой массив, который называется combinedCourseArray с целью передать его на UITableView. Создание первого массива, похоже, отлично работает.Как добавить массив в другой массив в Swift?

Но как я могу создать другой массив combinedCourseArray, который содержит все массивы типа 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) 

      } 
+0

'объединенныйArray' должен иметь тип' [[String: AnyObject]] ', поскольку это' Array <[String: AnyObject]> '. Используйте 'var combinationCourseArray: [[String: AnyObject]] = [[:]]' – Khundragpan

+0

'[String: AnyObject]' is dictionary not array –

+0

Thx. это была проблема. Я должен был добавить? после AnyObject: var mixedCourseArray: [[String: AnyObject?]] = [[:]] –

ответ

5

Вы должны перенести декларацию объединенного вызова CourseArray за пределы массива. Это должно быть var combinedCourseArray: [[String: AnyObject]] = [[:]], так как это массив, а не словарь.

И вы должны делать

combinedCourseArray.append(courseDataArray) 

вместо

combinedCourseArray[0] = courseDataArray 
+0

Thx. работает отлично. Мне пришлось добавить знак вопроса здесь: var mixedCourseArray: [[String: AnyObject?]] = [[:]] –

3

Сначала объявляю combinedCourseArray массив из стороны в этот цикл

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) 

     } 
} 
+0

Thx. работает отлично. Мне пришлось добавить знак вопроса здесь: var mixedCourseArray: [[String: AnyObject?]] = [[:]] –

1

Просто используйте flatMap на внешнем массиве, чтобы перевести один массив в другой массив, возможно, TS:

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"] 
    ] 
} 

Конечно, охранник не действительно необходимо, так как тип входа, предположительно, уже [[String:AnyObject]] и так как вы тогда не может иметь каких-либо внутренних повреждений, вы можете просто использовать map вместо flatMap

4
var FirstArray = [String]() 
var SecondArray = [String:AnyObject]() 

FirstArray.append(contentsOf: SecondArray.value(forKey: "key") as! [String]) 
Смежные вопросы