我从服务器获取字典作为JSON响应。从该字典中有一个键"错误" 现在我想获得"错误&#的值34; key.I知道错误总是 0 或 1 。所以我试图把它作为布尔值但它对我不起作用。请建议我怎样才能转换它的值为布尔值。
let error=jsonResult.objectForKey("error")
//this does not work for me
if(!error)
{
//proceed ahead
}
答案 0 :(得分:4)
Bool
不包含可将Int
转换为Bool
的初始值设定项。因此,要将Int
转换为Bool
,您可以创建extension
,即
extension Bool
{
init(_ intValue: Int)
{
switch intValue
{
case 0:
self.init(false)
default:
self.init(true)
}
}
}
现在您可以使用以下方法获取密钥错误的值:
if let error = jsonResult["error"] as? Int, Bool(error)
{
// error is true
}
else
{
// error does not exist/ false.
}
答案 1 :(得分:2)
已更新
将jsonResult视为NSDictionary
,错误值为Bool
。你可以按照以下方式检查。
guard let error = jsonResult.object(forKey: "error") as? Bool else{
// error key does not exist / as boolean
return
}
if !error {
// not error
}
else {
// error
}
答案 2 :(得分:1)
您的错误既不是0也不是1.它是一个可选对象。如果您的JSON中没有关键的“错误”,则为零,否则它可能是NSNumber。
很可能nil表示“没有错误”,如果它不是nil并且包含零则表示“没有错误”,如果它不是nil并且包含一个则表示“错误”并且如果它不是nil并且包含其他任何东西,然后你的json严重错误。
试试这个:
let errorObject = jsonResult ["error"]
if errorObject == nil or errorObject as? NSInteger == 0
当我说“尝试”时,我的意思是“尝试”。你是这里负责的开发者。使用包含错误0或1的字典检查它是否按预期工作,包含错误0或1的字典,以及包含例如error =“This is bad”的字典。
答案 3 :(得分:0)
检查error
和0
之间的相等性:
let error = jsonResult.objectForKey("error")
if error == 0 {
// proceed
}
答案 4 :(得分:0)
这里的另一个重点是,您正在使用Swift并将repsonse解析为NSDictionary。我可以这么说,因为你正在使用objectForKey
方法。最佳做法是将其解析为Swift Dictionary
。
可能看起来像Dictionary<String:AnyObject>
或[String:AnyObject]
然后您可以检查错误:
if let error = jsonResult["error"] where error == 0 {
//your code
}
答案 5 :(得分:0)
以下代码为我工作
if let error = jsonResult["error"] as? Int where Bool(error)
{
// error is true
print("error is true")
}
else
{
// error does not exist/ false.
print("error is false")
}
答案 6 :(得分:0)
非常简单的方法:
创建函数:
func getBoolFromAny(paramAny: Any)->Bool {
let str = "\(paramAny)"
return str == "1"
}
使用功能:
if let anyData = jsonResult["error"] {
if getBoolFromAny(anyData) {
// error is true
} else {
// error is false
}
}
此外,如果您想要一个线路条件,则上述功能可以简化为:
if let anyData = jsonResult["error"], getBoolFromAny(anyData) {
// error is true
} else {
// error is false
}