我有一个对我的webservice的调用,它获取3个字符串值,我想将它们存储好,所以我考虑使用nsuserdefaults
。这是我的代码:
var username = json["id"]
var googleUserId = json["g_username"]
var facebookUserId = json["f_username"]
NSUserDefaults.standardUserDefaults().setObject(username, forKey: "username")
NSUserDefaults.standardUserDefaults().setObject(googleUserId, forKey: "googleUserId")
NSUserDefaults.standardUserDefaults().setObject(facebookUserId, forKey: "facebookUserId")
NSUserDefaults.standardUserDefaults().synchronize()
我得到的错误说:
Cannot convert value of type 'JSON' to expected argument type 'AnyObject?'
这里有什么问题?
====编辑
很抱歉之前没有提到 - json变量来自alamofire响应,这就是它在我的代码中的样子:
Alamofire.request(.POST, "http://mywebservice", parameters: par) .response {
(request, response, data, error) in
if(error == nil){
var json = JSON(data: data!)
答案 0 :(得分:1)
执行此操作时:
var username = json["id"]
你没有得到一个字符串。你得到一个JSON对象。如果你知道它是一个字符串,那就投吧。
var username = json["id"] as! String
if let username = json["id"] as! String {
// it is not nil
}
else {
// it is nil
}
答案 1 :(得分:1)
您正在使用SwiftyJSON,因此您还应该使用SwiftyJSON的功能。 :)
没有必要"垂头丧气"使用SwiftyJSON的字典结果,它已经完成了!
每个SwiftyJSON对象都有可选的getter和非可选的getter。
你有一个字符串作为结果吗?使用.string
:
if let username = json["id"].string {
defaults.setObject(username, forKey: "username")
}
对于整数,它将是.int
,对于数组,它是.array
等。
还有非选择性的吸气剂,它们有" Value"添加到酒店:
let username = json["id"].stringValue
defaults.setObject(username, forKey: "username")
但警告!非可选的getter将假设值在此处并强制解包,因此如果它为nil,则会崩溃:json["id"].stringValue
与json["id"].string!
相同。
答案 2 :(得分:0)
试试这段代码吧,它安全可靠
let defaults = NSUserDefaults.standardUserDefaults()
if let username = json["id"] as? String {
defaults.setObject(username, forKey: "username")
}
if let googleUserId = json["g_username"] as? String {
defaults.setObject(googleUserId, forKey: "googleUserId")
}
if let facebookUserId = json["f_username"] as? String {
defaults.setObject(facebookUserId, forKey: "facebookUserId")
}
defaults.synchronize()
答案 3 :(得分:0)
试试这个:
Alamofire.request(.POST, "http://mywebservice", parameters: par).responseJSON {
request, response, result in
switch result {
case .Success(let data):
let json = JSON(data: data)
// ...
case .Failure(let data, let error):
print("Request failed with error: \(error)")
}
}