我正在尝试将下面的响应中的“状态”转换为Int。
{
"status": "200",
"message": "Token successfully generated.",
"data": {
"token": "abc"
}
}
当我尝试转换时,显示错误,例如无法将类型'_SwiftValue'的值强制转换为'NSNumber'。
这是我在代码中尝试过的。
var status:Int = 0
var dict = dictTemp as! Dictionary<String,AnyObject>
if let value = dict["status"] as? String {
status = value.toInt()!
} else if let value = dict["status"] as? Int {
status = value
}
// let status = dictTemp!.value(forKey: "status") as? String ?? ""
if(status == 200)
{
errorCode = 0
error = false
}
else
{
errorCode = 1
error = true
}
它总是转到其他部分。
在这里,我附上了在JSON数据中可以看到的截图。
请帮助我如何将状态转换为Int。
答案 0 :(得分:0)
我认为您的问题是因为您使用的是AnyObject
而不是Any
。
您的字典必须为[String: Any]
类型。
查看此答案here。
AnyObject仅适用于引用类型(类),Any适用于两个值 和参考类型。
此外,由于您将问题标记为Swift 4,因此您应该使用Int()
而不是.toInt()
进行转换。
示例:
func getStatus(jsonData: Data) -> Int {
guard
let json = try? JSONSerialization.jsonObject(with: jsonData, options: []),
let dict = json as? [String: Any],
let statusString = dict["status"] as? String,
!statusString.isEmpty,
let status = Int(statusString)
else {
return 0
}
return status
}
答案 1 :(得分:0)
使用结构更加安全:
FETCH