gpt4 book ai didi

ios - 将 JSON 映射到数据模型,需要从动态键中获取嵌套的电子邮件值

转载 作者:行者123 更新时间:2023-11-28 15:08:03 25 4
gpt4 key购买 nike

我正在使用 ObjectMapper 将数据映射到我的模型,我需要在我的模型中填写一个电子邮件属性。棘手的部分是,根据用户注册的方式(使用电子邮件,或使用Facebook/Google 帐户),包含嵌套电子邮件属性的 key 将反射(reflect)他们的注册选择。我将在下面给出我的 JSON 数据的示例。

在常规电子邮件注册的情况下:

"local": {
"email": "testclient1@mail.com",
"password": "$2a$10$ZqqsS5F1QXmoEXnwL3v2sAxES",
"passwordConf": "$2a$10$ZqqzsLfQXmoEXnwL3v2sAxES"
}

在常规 Facebook 或谷歌注册的情况下:

"facebook": {
"id": "10287",
"email": "jcstclair@icloud.com"
}

"google": {
"id": "11514716",
"email": "parkhomeyp@gmail.com"
}

你明白了。如您所见, key 必须不同才能匹配 3 个选项(本地、Facebook 或谷歌)之一,以便获取电子邮件。解决此问题的一种方法是使用枚举。我将发布模型的相关部分。

import ObjectMapper

struct Client: Mappable {

enum EmailType: String {
case local = "local"
case facebook = "facebook"
case google = "google"
}

var emailType: String?

init?(map: Map) {}

mutating func mapping(map: Map) {
emailType <- map["\(EmailType.RawValue()).email"]
}

想法是使用字符串插值,以便找到与上面枚举的匹配项。 .email 允许我获取嵌套属性。这似乎是一个合乎逻辑的解决方案,但它为 emailType 属性返回 nil,因此很明显它没有正确映射它。

既然您已经看到了我的 JSON 和数据模型,您认为访问电子邮件属性的最佳方式是什么,无论它具有哪种类型的键。如果可能,我想避免为 local、fb 和 google 创建 3 个属性,我希望它简洁但动态。感谢您的帮助!

最佳答案

你想要实现的目标我建议创建单独的模型类,因为它很容易为将来的更新修改

你做的不对。您刚刚创建了 EmailTypeRawValue 对象,它总是返回空

    emailType       <- map["\(EmailType.RawValue()).email"]

如果你打印

 print("\(EmailType.RawValue()).email")

你得到的输出是

.email

我对 Map 仍然没有更好的主意你需要的是告诉尝试枚举的每种情况以获取数据

我的建议是你需要检查 emailType String 中的 nil

试试这段代码

    emailType       <- (map["\(EmailType.local).email"] ?? map["\(EmailType. facebook).email"] ||  map["\(EmailType. google).email"] )

希望对你有帮助

编辑\更新

我对 Mappble 进行了研究,发现以下内容对您有帮助

您收到错误消息是因为 Map 未返回非可选值。所以要摆脱它,你需要使用 map.JSON

   if map.JSON[EmailType.local.rawValue] != nil {
emailType <- (map["\(EmailType.local).email"] )
} else if map.JSON[EmailType.facebook.rawValue] != nil {
emailType <- (map["\(EmailType.facebook).email"] )
} else if map.JSON[EmailType. google.rawValue] != nil {
emailType <- (map["\(EmailType.google).email"] )
}

如果您仍然遇到问题,请告诉我。

关于ios - 将 JSON 映射到数据模型,需要从动态键中获取嵌套的电子邮件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48145463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com