Alamofire 参数与类中的数组

Posted

技术标签:

【中文标题】Alamofire 参数与类中的数组【英文标题】:Alamofire parameter with array in class 【发布时间】:2016-03-15 20:08:30 【问题描述】:

这对我来说是一个反复出现的问题 - 我可以使用 SwiftyJSON 来执行此操作或如何执行此操作吗?

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


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

我有以下课程:

import UIKit

import SwiftyJSON

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


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

阿拉莫火

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

我已经尝试过类似的方法 - 将 var dictionary: [String: AnyObject] 添加到类中:

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],
            ]
    



   

【问题讨论】:

【参考方案1】:

除了给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  $0.dictionary 
            ]
        
    

注意,我将 StudentsOf1969 重命名为 ClassOfStudents 以更清楚地表明它更普遍地用于任何班级的学生,而不是 1969 年的学生。此外,您的 JSON 引用的班级名称,而不是教师姓名,所以我做了相应的修改。

不管怎样,你现在可以通过调用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

【讨论】:

非常感谢!!在较早的尝试中,我非常想念 $0.dictionary。马上!

以上是关于Alamofire 参数与类中的数组的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire4在使用方法时抛出“额外参数方法”:.post

如何在 Swift 3 中使用 Alamofire 在 POST 请求中将给定的 JSON 作为参数发送?

请求 Alamofire

Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON

AlamoFire 图像内存问题

Alamofire 发送带键和多值的参数数组