2015-12-07 61 views
0

我从服务器获取数据,其中一个值可以是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来实现?

回答

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") 
} 
1

您可以使用关键字是知道的类型(https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html检查型)

编辑:测试在操场

var names: [String] = ["name 1" , "foo" , "Hotline Bling" ,"vaudoo chills"] 


func castingIs (sender : AnyObject) -> Bool { 
    guard sender is String || sender is [String] else { 
     return false 
    } 
    return true 
} 

castingIs(names) // true 
castingIs(names[0]) // true 
castingIs(4) // false