使用多种类型的警卫

时间:2015-12-07 11:22:59

标签: ios swift

我从服务器获取数据,其中一个值可以是NSDictionary[NSDictionary]。我想知道是否可以使用新的Swift guard来检查这两种类型。这就是我现在正在做的事情:

guard let list = response["answer"] as? [NSDictionary] else {
    return nil
}

但我想要这样的事情:

guard let list = response["answer"] as? [NSDictionary] || let list = response["answer"] as? NSDictionary else {
    return nil
}

我不想使用if-let,因为我非常喜欢新的语法。有没有办法用guard来实现这个目标?

2 个答案:

答案 0 :(得分:1)

您可以使用关键字is来了解类型(https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html检查类型)

编辑:在游乐场测试

[Shift]-[F1]

答案 1 :(得分:1)

我建议将检查的可用性和类型分开。

首先检查密钥是否存在

  guard let list : AnyObject = response["answer"] else {
    return nil
  }

然后检查类型

if list is NSDictionary {
  print("is dictionary")
} else if list is [NSDictionary] {
  print("is array of dictionary")
} else {
  fatalError("that should never happen")
}