Разделение массива и присвоение значений каждому значению в нем - PullRequest
0 голосов
/ 09 мая 2020

Я использую Firestore, и когда я запрашиваю данные, они поступают в массив

print("Document data: \(dataDescription)")

, который распечатывает Document data: ["lastname": Test, "firstname": Test]

I created a class 

    class User {

    var firstName: String
    var lastName: String

    init(firstName: String, lastName: String) {

        self.firstName = firstName
        self.lastName = lastName
    }

}

Как я могу назначить часть массива для "фамилии" классу User и присвоить в lastName

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Лучший способ выполнить этот синтаксический анализ Json в модели и наоборот - использовать любую библиотеку синтаксического анализа, например ObjectMapper , Swifty Json или swift Codable протокол. С ними вы можете с такой легкостью выполнять двусторонний синтаксический анализ, и даже для сложной модели данных вам не нужно проделывать много работы. Так что лучше не изобретать велосипед.

Вот несколько примеров для вашего конкретного c варианта использования.

let userData = ["lastname": "Last", "firstname": "First"]

Использование ObjectMapper: ( Install pod и добавьте импорт, чтобы он заработал )

struct User: Mappable {
    var firstname: String?
    var lastname: String?

    init?(map: Map) {}

    mutating func mapping(map: Map) {
         firstname <- map["firstname"]
         lastname <- map["lastname"]
    }
}

if let newuser = Mapper<User>().map(JSON: userData) {
    print(newuser)
}

Используя протокол Codeable:

struct User: Codable {
    var firstname: String
    var lastname: String
}

do {
    let data = try JSONSerialization.data(withJSONObject: userData, options: .prettyPrinted)
    let decoder = JSONDecoder()
    let user = try decoder.decode(User.self, from: data)
} catch {
    print(error.localizedDescription)
}
0 голосов
/ 09 мая 2020

Это

["lastname": Test, "firstname": Test]

словарь, а не массив, вам нужно

guard let res = snap.value as? [String:String] ,let fname = res["firstName"] ,     
let lname = res["lastName"] else { return }
let user = User(firstName:fname,lastName:lname) 

Совет: подумайте, действительно ли вам нужен struct не class

...