来自Object的JSON与iOS Swift 3中的数组问题

时间:2017-04-22 06:56:07

标签: ios json dictionary swift3

public class LessonAssignment {

    private var title : String?
    private var category : String?
    private var week : Int?
    private var day : Int?


    //Title
    public func getTitle() -> String {
        return title!
    }

    public func setTitle(title : String) {
        self.title = title
    }

    //Category
    public func getCategory() -> String {
        return category!
    }

    public func setCategory(category : String) {
        self.category = category
    }

    //Week
    public func getWeek() -> Int {
        return week!
    }

    public func setWeek(week : Int) {
        self.week = week
    }

    //Day
    public func getDay() -> Int {
        return day!
    }

    public func setDay(day : Int) {
        self.day = day
    }

/**
    Returns an array of models based on given dictionary.

    Sample usage:
    let lessonAssignment_list = LessonAssignment.modelsFromDictionaryArray(someDictionaryArrayFromJSON)

    - parameter array:  NSArray from JSON dictionary.

    - returns: Array of LessonAssignment Instances.
*/
    public class func modelsFromDictionaryArray(array:NSArray) -> [LessonAssignment]
    {
        var models = [LessonAssignment]()
        for item in array {
            models.append(LessonAssignment(dictionary: item as! NSDictionary)!)
        }
        return models
    }

/**
    Constructs the object based on the given dictionary.

    Sample usage:
    let lessonAssignment = LessonAssignment(someDictionaryFromJSON)

    - parameter dictionary:  NSDictionary from JSON.

    - returns: LessonAssignment Instance.
*/
     init() { }

    required public init?(dictionary: NSDictionary) {

        title = dictionary["title"] as? String
        category = dictionary["category"] as? String
        week = dictionary["week"] as? Int
        day = dictionary["day"] as? Int
    }


/**
    Returns the dictionary representation for the current instance.

    - returns: NSDictionary.
*/
    public func dictionaryRepresentation() -> NSDictionary {

        let dictionary = NSMutableDictionary()

        dictionary.setValue(self.title, forKey: "title")
        dictionary.setValue(self.category, forKey: "category")
        dictionary.setValue(self.week, forKey: "week")
        dictionary.setValue(self.day, forKey: "day")

        return dictionary
    }

    func toDictionary() -> [String : Any] {
        var dictionary = [String:Any]()
        let otherSelf = Mirror(reflecting: self)

        for child in otherSelf.children {
            if let key = child.label {
                dictionary[key] = child.value
            }
        }
        return dictionary
    }
}



public class LessonPlan {
    private var name : String?
    private var weeks : Int?
    private var days : Int?
    private var hours : Int?
    private var lessonAssignment = [LessonAssignment]()
    private var lessonNote = [LessonNote]()


    //Name
    public func getName() -> String {
        if name == nil {
            return ""
        } else {
            return name!
        }
    }

    public func setName(name : String) {
        self.name = name
    }

    //Weeks
    public func getWeeks() -> Int {
        if weeks == 0 {
            return 0
        } else {
            return weeks!
        }
    }

    public func setWeeks(weeks : Int) {
        self.weeks = weeks
    }

    //Days
    public func getDays() -> Int {
        if days == 0 {
            return 0
        } else {
            return days!
        }
    }

    public func setDays(days : Int) {
        self.days = days
    }

    //Hours
    public func getHours() -> Int {
        if days == 0 {
            return 0
        } else {
            return hours!
        }
    }

    public func setHours(hours : Int) {
        self.hours = hours
    }

    //LessonAssignment
    public func getLessonAssignment() -> [LessonAssignment] {
        return lessonAssignment
    }

    public func setLessonAssignment(lessonAssignment : [LessonAssignment]) {
        self.lessonAssignment = lessonAssignment
    }

    //LessonNote
    public func getLessonNote() -> [LessonNote] {
        return lessonNote
    }

    public func setLessonNote(lessonNote : [LessonNote]) {
        self.lessonNote = lessonNote
    }


/**
    Returns an array of models based on given dictionary.

    Sample usage:
    let lessonPlan_list = LessonPlan.modelsFromDictionaryArray(someDictionaryArrayFromJSON)

    - parameter array:  NSArray from JSON dictionary.

    - returns: Array of LessonPlan Instances.
*/
    public class func modelsFromDictionaryArray(array:NSArray) -> [LessonPlan]
    {
        var models:[LessonPlan] = []
        for item in array
        {
            models.append(LessonPlan(dictionary: item as! NSDictionary)!)
        }
        return models
    }

/**
    Constructs the object based on the given dictionary.

    Sample usage:
    let lessonPlan = LessonPlan(someDictionaryFromJSON)

    - parameter dictionary:  NSDictionary from JSON.

    - returns: LessonPlan Instance.
*/
     init() { }

    required public init?(dictionary: NSDictionary) {

        name = dictionary["name"] as? String
        weeks = dictionary["weeks"] as? Int
        days = dictionary["days"] as? Int
        hours = dictionary["hours"] as? Int

        lessonAssignment = LessonAssignment.modelsFromDictionaryArray(array:dictionary["lessonAssignment"] as! NSArray)

        lessonNote = LessonNote.modelsFromDictionaryArray(array: dictionary["lessonNote"] as! NSArray)
    }


/**
    Returns the dictionary representation for the current instance.

    - returns: NSDictionary.
*/
    public func dictionaryRepresentation() -> NSDictionary {
        let dictionary = NSMutableDictionary()
        dictionary.setValue(self.name, forKey: "name")
        dictionary.setValue(self.weeks, forKey: "weeks")
        dictionary.setValue(self.days, forKey: "days")
        dictionary.setValue(self.hours, forKey: "hours")
        return dictionary
    }

    func toDictionary() -> [String : Any] {
        var dictionary = [String:Any]()
        let otherSelf = Mirror(reflecting: self)

        for child in otherSelf.children {
            print("Child = \(child)")
            print("Child Label = \(String(describing: child.label))")
            print("Child Value = \(child.value)")

            if let key = child.label {
                 dictionary[key] = child.value
            }
        }
        return dictionary
    }
}

公共类ServerRequest {

private var lessonPlan : LessonPlan?

init() {
}

//LessonPlan
public func getLessonPlan() -> LessonPlan {
    return lessonPlan!
}

public func setLessonPlan(lessonPlan : LessonPlan) {
    self.lessonPlan = lessonPlan
}

func toDictionary() -> [String : Any] {
    var dictionary = [String:Any]()
    let otherSelf = Mirror(reflecting: self)

    for child in otherSelf.children {
        if let key = child.label {
            dictionary[key] = lessonPlan?.toDictionary()
        }
    }
    return dictionary
}

}

  

当前回应= [" lessonPlan":[" name":" test"," days":2,"周":1,   "小时":1," lessonAssignment": [HSP.LessonAssignment,   HSP.LessonAssignment] ," lessonNote":[]]]

     

预期回复 = [" lessonPlan":[" name":" test"," days" :2,   "周":1,"小时":1," lessonAssignment":[[" title" :"某些值1","类别" :"一些价值","周" :1," day" :2]]," lessonNote":[]]]

而不是LessinAssignment对象我想添加实际值,即数组。任何线索如何解决这个问题。我知道我必须在toDictionary方法中添加更多逻辑,并基于关键" lessonAssignment"我必须获取每个数组并将键中的值添加为最终数组。

1 个答案:

答案 0 :(得分:1)

从我的评论中可以看出:

assignments.map({
  (value: HSP.LessonAssignment) -> NSDictionary in
  return value.toDictionary()
})