数组在 class 中的 Alamofire 参数

Alamofire parameter with array in class

这对我来说是一个反复出现的问题 - 我可以使用 SwiftyJSON 来做这个吗?

如何使用 Alamofire 通过 .POST 获得以下 JSON:

{
    "class":"Class of 1969",
        "students": 
        [
            {
                "name":"A name",
                "age":25
            },
            {
                "name": "B name",
                "age": 25
            }
        ]
}

我有以下 class:

import UIKit

import SwiftyJSON

class Student{
    var Name:String = ""
    var Age: Int = 0
}

class StudentsOf1969{
    var Teacher: String = ""
    var Students = [Student]()
   }


Alamofire

        Alamofire.request(.POST,
            strUrl,
            parameters: parameters, // How?????????
            encoding: .JSON,
            headers: headersWish).responseObject {...


我试过这样的事情 - 添加一个 var dictionary: [String: AnyObject] 到 class:

class Student{
    var Name:String = ""
    var Age: Int = 0
}

class StudentsOf1969{
    var Teacher: String = ""
    var Students = [Student]()

var dictionary: [String: AnyObject]{
    get {
        return [
            "teacher": self.Teacher,
            "students": self.Students,
            // or
            "students": [self.Students],
            ]
    }
}


   }

除了给 StudentsOf1969 一个 dictionary 属性,你应该对 Student 做同样的事情。然后当你调用 StudentsOf1969description 方法时,它会为数组中的每个 Student 调用 dictionary 属性(这可以很优雅地完成使用 Swift 的 map 函数)。

例如:

struct Student {
    var name: String
    var age: Int

    var dictionary: [String: AnyObject] {
        get {
            return ["name": name, "age": age]
        }
    }
}

struct ClassOfStudents {
    var className: String
    var students: [Student]

    var dictionary: [String: AnyObject] {
        get {
            return [
                "class": className,
                "students": students.map { [=10=].dictionary }
            ]
        }
    }
}

请注意,我将 StudentsOf1969 重命名为 ClassOfStudents 以更清楚地表明它更普遍地用于任何 class 学生,而不是 1969 年的学生。此外,您的JSON 引用了 class 姓名,而不是老师姓名,因此我相应地对其进行了修改。

无论如何,你现在可以通过调用classOf1969dictionary方法来获取parameters字典:

let classOf1969 = ClassOfStudents(className: "Class of 1969", students: [
    Student(name: "A name", age: 25),
    Student(name: "B name", age: 25)
])

let parameters = classOf1969.dictionary