如何在Swift中将一个数组附加到另一个数组?

4
我有一个JSON响应,我需要解析它。我使用for循环将单个元素写入名为courseDataArray的数组中。之后,我想要将这个新创建的数组写入另一个名为combinedCourseArray的数组中,以便将其传递给UITableView。创建第一个数组似乎运行良好。但如何创建另一个数组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)

            }

combinedArray 应该是 [[String: AnyObject]] 类型,因为它是一个 Array<[String:AnyObject]>。请使用 var combinedCourseArray: [[String: AnyObject]] = [[:]] - Khundragpan
[String: AnyObject] 是字典而不是数组。 - Nirav D
谢谢,那就是问题所在。我必须在 AnyObject 后面添加 ? :var combinedCourseArray: [[String: AnyObject?]] = [[:]] - Stefan Badertscher
顺便提一下,courseDataArray 实际上是一个 Dictionary 而不是一个 Array - David Berry
4个回答

5

您应该将combinedCourseArray声明移至数组之外。它应该是var combinedCourseArray: [[String: AnyObject]] = [[:]],因为它是一个数组而不是字典。

同时,您应该执行

combinedCourseArray.append(courseDataArray)

替代

combinedCourseArray[0] = courseDataArray

谢谢,运行良好。我不得不在这里添加问号:var combinedCourseArray: [[String: AnyObject?]] = [[:]] - Stefan Badertscher

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

FirstArray.append(contentsOf: SecondArray.value(forKey: "key") as! [String])

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)

        }
 }

谢谢,运行良好。我不得不在这里添加问号:var combinedCourseArray: [[String: AnyObject?]] = [[:]] - Stefan Badertscher

1

只需在外部数组上使用flatMap,将一个数组转换为另一个数组,可能会删除一些元素:

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即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接