我的类用户如何在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
methoddata(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"}}