2016-03-15 1 views
1

Это повторяющаяся проблема для меня - могу ли я использовать SwiftyJON для этого или как?Параметр Alamofire с массивом в классе

Как вы можете получить следующий JSON через .POST с Alamofire:

{ 
    "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

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


Я пытался что-то вроде этого - добавление в вар 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. И затем, когда вы вызываете метод descriptionStudentsOf1969, он будет называть dictionary для каждого Student в массиве (это можно сделать довольно изящно с помощью функции 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 ссылается класс имя, а не имя учителя, поэтому я соответствующим образом изменил это.

Во всяком случае, теперь вы можете получить parameters словарь по телефону dictionary метода classOf1969:

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

Спасибо так много !! Раньше я так скучал по $ 0.dictionary. Право на! –