0

I have the following class:

class Person {
    let name: String
    let surname: String

    init(name: String, surname: String) {
        self.name = name
        self.surname = surname
    }
}

How do I convert Person(name: "Mike", surname: "Wasowski") to a dictionary?

  • `toDict()->[String:String] {return ["name":self.name, "surname": self.surname"]}`? Or you mean by using Codable? – Larme Feb 06 '18 at 10:42

4 Answers4

0
    class Person {
        let name: String
        let surname: String

        init(name: String, surname: String) {
            self.name = name
            self.surname = surname
        }
        func convertIntoDict() -> Dictionary<String, String> {
            var dict = Dictionary<String, String>()
            dict["name"] = self.name
            dict["surname"] = self.surname
            return dict
        }
    }

let dict = Person(name: "Mike", surname: "Wasowski").convertIntoDict()


//// ["name": "Mike", "surname": "Wasowski"] 
Uma Madhavi
  • 4,851
  • 5
  • 38
  • 73
0

Way 1:

class Person {
    let name: String
    let surname: String

    var dict: [String:String]?

    init(name: String, surname: String) {
        self.name = name
        self.surname = surname 
        self.dict = ["name":name, "surname":surname]
    }
}

Way 2

class Person {
    let name: String
    let surname: String?

    init(name: String, surname: String) {
        self.name = name
        self.surname = surname 
    }

    func getDict() -> [String:String] {
       return ["name":name, "surname":surname]
    } 

}
Salman Ghumsani
  • 3,647
  • 2
  • 21
  • 34
0

Add new method toDictionary in Person class and do following code:

class Person {
    let name: String
    let surname: String

    init(name: String, surname: String) {
        self.name = name
        self.surname = surname
    }

    func toDictionary() -> [String:Any]
    {
        var dictionary = [String:Any]()
        dictionary["name"] = name
        dictionary["surname"] = surname
        return dictionary
    }
}

Example:

let person = Person(name: "Girish", surname: "Chovatiya")
let dic = person.toDictionary()
print(dic)
-1

Here is an elegant way without using the names of the keys:

    func toDictionary() -> [String: Any] {
        var dict: [String: Any] = [:]
        let mirror = Mirror(reflecting: self)
        
        for case let (label?, value) in mirror.children {
            dict[label] = value
        }
        
        return dict
    }
Aviram Netanel
  • 12,633
  • 9
  • 45
  • 69