我的类用户如何在Swift中返回带引号的所有属性?

我的类用户如何在Swift中返回带引号的所有属性?,swift,nsdictionary,quotation-marks,Swift,Nsdictionary,Quotation Marks,我有这门课: 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

我有这门课:

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 = "jgurban@gmail.com";
        name = "Juan Gil";
        password = "";
        provider = Facebook;
        uid = 1925035627521626;
    };
})
但我需要所有带有“”的值

})

如何获取带引号的所有值


提前谢谢

要将对象编码为JSON数据,应该使对象符合可编码协议,并使用JSONEncoder encode方法将对象转换为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: "jgurban@gmail.com", 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":"jgurban@gmail.com","name":"Juan Gil","password":"","provider":"Facebook","uid":"1925035627521626"}}\n"
} catch {
    print(error)
}

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

如果您试图在Swift 4中构建JSON,可以将
Encodable
jsonecoder
结合使用:

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: "jgurban@gmail.com", password: "", provider: "Facebook", uid: "1925035627521626")
let data = try! JSONEncoder().encode(["user": user])
如果要检查结果,请执行以下操作:

let string = String(data: data, encoding: .utf8)!
print(string)
其结果是:

{"user":{"email":"jgurban@gmail.com","password":"","provider":"Facebook","uid":"1925035627521626","name":"Juan Gil"}}

这看起来像调试器输出。引号不是内存中实际数据的一部分。你到底想用这个输出做什么?你用的是Swift4吗?如果您试图将对象编码为JSON字符串,则应使其符合
Encodable
协议,并使用
jsonecoder
encode
方法。如果您使用的是较旧的Swift版本(Xcode 8.x或更早版本),则需要使用
JSONSerialization
method
data(with jsonObject:)
我使用的是Swift 4。我必须发出一个POST请求,用这个API注册一个用户:我所有的API都是一个字符串。用户[email]用户[name]用户[provider]用户[uid]您的Xcode版本是什么?Xcode 9.1(9B55)谢谢您,但我需要向服务器发送一个对象用户,其中包含这些值。类似这样的内容:{user={email='jgurban@me.com“name=”“;password=968knmsn;provider=”“;uid=”“;};}。是。我想是吧。API url为:并且它需要以下格式:用户必须是散列。属性电子邮件、名称、提供程序和uid必须为字符串。服务器给我回复代码422。Thanks422表示请求格式正确,但由于某种原因无法处理。也许电子邮件地址已经存在?也许密码没有通过他们的一些验证规则?很难说。@JuanGil您可能需要对对象键进行排序。检查更新的答案。谢谢!你说得对,利奥,谢谢大家的帮助和建议。
{"user":{"email":"jgurban@gmail.com","password":"","provider":"Facebook","uid":"1925035627521626","name":"Juan Gil"}}