ios - 使用 api 响应(使用 Gloss)更新存储的用户模型,而无需逐行更新每个键

标签 ios swift

我正在使用以下类结构:

import Gloss

class LMSUser: BaseResponse {

    public var userId:String?
    public var firstName:String?
    public var middleName:String?
    public var lastName:String?
    public var email:String?
    public var phone:String?
    public var token:String?
    public var roles:[String]?

    required init?(json: JSON) {
        super.init(json: json)
        self.userId = "userId" <~~ json
        self.firstName = "firstName" <~~ json
        self.middleName = "middleName" <~~ json
        self.lastName = "lastName" <~~ json
        self.email = "email" <~~ json
        self.phone = "phone" <~~ json
        self.token = "token" <~~ json
        self.roles = "roles" <~~ json
        self.postInit()
    }

    public func postInit() {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.appUser = self
        UserDefaults.standard.set(self.toJSON(), forKey: String.kDeviceUser)
        UserDefaults.standard.synchronize()
    }

    override func toJSON() -> JSON? {
        return jsonify([
            super.toJSON(),
            "userId" ~~> self.userId,
            "firstName" ~~> self.firstName,
            "middleName" ~~> self.middleName,
            "lastName" ~~> self.lastName,
            "email" ~~> self.email,
            "phone" ~~> self.phone,
            "token" ~~> self.token,
            "roles" ~~> self.roles,
            ])
    }
}

假设它是一个单例类并且其中有更多变量,并且 api 不会每次都提供完整的细节。 我所做的只是逐行手动更新每个字段。 谁能帮我省下几行代码?

最佳答案

你可以在你的类中使用一个方法 initUserData 来初始化可用的数据,并为你写的行:)

示例代码:

import Gloss

class LMSUser: BaseResponse {

    public var userId:String?
    public var firstName:String?
    public var middleName:String?
    public var lastName:String?
    public var email:String?
    public var phone:String?
    public var token:String?

    required init?(json: JSON) {
        super.init(json: json)
        self.initUserData(json: json)
        self.postInit()
    }

    public func initUserData(json: JSON) {
        let vUserID:String? = "userId" <~~ json
        if vUserID != nil {
            self.userId = vUserID
        }

        let vFirstName:String? = "firstName" <~~ json
        if vFirstName != nil {
            self.firstName = vFirstName
        }

        let vMiddleName:String? = "middleName" <~~ json
        if vMiddleName != nil {
            self.middleName = vMiddleName
        }

        let vLastName:String? = "lastName" <~~ json
        if vLastName != nil {
            self.lastName = vLastName
        }

        let vEmail:String? = "email" <~~ json
        if vEmail != nil {
            self.email = vEmail
        }

        let vPhone:String? = "phone" <~~ json
        if vPhone != nil {
            self.phone = vPhone
        }

        let vToken:String? = "token" <~~ json
        if vToken != nil {
            self.token = vToken
        }
    }

    public func postInit() {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.appUser = self
    }

    override func toJSON() -> JSON? {
        return jsonify([
            super.toJSON(),
            "userId" ~~> self.userId,
            "firstName" ~~> self.firstName,
            "middleName" ~~> self.middleName,
            "lastName" ~~> self.lastName,
            "email" ~~> self.email,
            "phone" ~~> self.phone,
            "token" ~~> self.token
            ])
    }
}

关于ios - 使用 api 响应(使用 Gloss)更新存储的用户模型,而无需逐行更新每个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45913839/

相关文章:

ios - 使用 react-native-camera 的人脸检测功能

ios - 隐藏并删除嵌套 UIView swift 的所有空间

swift - 在 swift/spritekit 中摆脱图像帧

swift - 为什么 "UInt64(1 << 63)"会崩溃?

ios - HealthKit 请求授权(toShare :, 读取,完成 : ) : is there are way to know whether it was promped at least once?

iphone - 如何将选定的数组从一个 uitable 传递到另一个 uitable

ios - OpenGL 2.0 根据对象大小调整纹理大小

ios - 是否可以在透明部分标题后面 "hide"UITableViewCell?

ios - carthage build 不适用于 Xcode 12.0,它适用于 Xcode 11.3。任务失败,退出代码 1 :

swift - 解决包依赖 swiftUI 项目时出错