在swift中将任何对象转换为boolean?

时间:2016-09-22 07:02:39

标签: ios iphone swift xcode

我从服务器获取字典作为JSON响应。从该字典中有一个键"错误" 现在我想获得"错误&#的值34; key.I知道错误总是 0 1 。所以我试图把它作为布尔值但它对我不起作用。请建议我怎样才能转换它的值为布尔值。

  let error=jsonResult.objectForKey("error")
  //this does not work for me
   if(!error)
  {
      //proceed ahead
   }

7 个答案:

答案 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)

检查error0之间的相等性:

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
}