我的班级用户如何在Swift中用引号将我的所有属性归还给我?

问题描述 投票:-1回答:2

我有这门课:

class User {

    let name: String
    let email: String
    let password: String
    let provider: String
    let uid: String

    init (name: String, email:String, password: String, provider: String, uid: String) {

        self.name = name
        self.email = email
        self.password = password
        self.provider = provider
        self.uid = uid
    }
    var dictionary: [String: [String: Any]] {
        return ["user" : ["name": name, "email": email, "password": password, "provider": provider, "uid": uid]
        ]
    }
    var nsDictionary: NSDictionary {

        return dictionary as NSDictionary
    }
}

当我创建用户时:

let userNew = User(name: userName!, email: userEmail!, password: "", provider: provider, uid: userId!)

我的用户是这样创建的:

Optional({
    user =     {
        email = "[email protected]";
        name = "Juan Gil";
        password = "";
        provider = Facebook;
        uid = 1925035627521626;
    };
})

但我需要所有值“”

Optional({
user =     {
    email = "[email protected]";
    name = "Juan Gil";
    password = "";
    provider = "Facebook";
    uid = "1925035627521626";
};

})

如何用引号获取所有值?

提前致谢!

swift nsdictionary quotation-marks
2个回答
0
投票

您对“user = {...}”输出中的双引号的查询表明,在打印描述字典时,您可能会将JSON与输出混淆。他们是两个完全不同的东西。

如果你想在Swift 4中构建JSON,你可以使用EncodableJSONEncoder

struct User: Encodable {
    let name: String
    let email: String
    let password: String
    let provider: String
    let uid: String
}

然后你可以这样做:

let user = User(name: "Juan Gil", email: "[email protected]", password: "", provider: "Facebook", uid: "1925035627521626")
let data = try! JSONEncoder().encode(["user": user])

如果要检查结果:

let string = String(data: data, encoding: .utf8)!
print(string)

它导致:

{"user":{"email":"[email protected]","password":"","provider":"Facebook","uid":"1925035627521626","name":"Juan Gil"}}

0
投票

要将对象编码为JSON数据,应使对象符合Encodable协议,并使用JSONEncoder编码方法将对象转换为JSON数据。请注意,您也可以使用类,但最好使用结构:

struct User: Codable {
    let name: String
    let email: String
    let password: String
    let provider: String
    let uid: String
}

有时,在发布JSON数据时,API可能需要对对象键进行排序。为了实现这一点,您需要将编码器outputFormatting属性设置为.sortedKeys

let jsonObject =  ["user" : User(name: "Juan Gil", email: "[email protected]", password: "", provider: "Facebook", uid: "1925035627521626")]
do {
    let encoder = JSONEncoder()
    encoder.outputFormatting = .sortedKeys
    let jsondata = try encoder.encode(jsonObject)
    print(String(data: jsondata, encoding : .utf8)!)  // "{"user":{"email":"[email protected]","name":"Juan Gil","password":"","provider":"Facebook","uid":"1925035627521626"}}\n"
} catch {
    print(error)
}
© www.soinside.com 2019 - 2024. All rights reserved.