【问题标题】:Splitting up an array and assigning values to each value in it拆分数组并将值分配给其中的每个值
【发布时间】:2020-05-09 17:45:13
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: ios arrays swift google-cloud-firestore


    【解决方案1】:

    将这些 Json 解析为模型(反之亦然)的更好方法是使用任何解析库,例如ObjectMapperSwiftyJson 或 swift 的 Codable 协议。您可以轻松地对它们进行双向解析,即使对于复杂的数据模型,您也不必做很多工作。 所以最好不要重新发明轮子。

    以下是针对您的特定用例的一些示例。

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

    使用 ObjectMapper:安装 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)
    }
    

    【讨论】:

      【解决方案2】:

      这个

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多