我正在尝试检测来自API的字典是空的还是有值但是每当我尝试做Dict.count时它都会崩溃。
if let personalInfo = self.scanResult?.fields { // personalInfo has 0 values but not nil
let image = NSData(base64EncodedString: (personalInfo["Photo"] as? String)!, options: NSDataBase64DecodingOptions(rawValue: 0)) // Crashes
}
我也试过isEmpty,它也崩溃了。
答案 0 :(得分:0)
在尝试使用之前,您应该打开个人信息[“照片”]。这样,您可以确保在没有Photo Key存在值的情况下尝试实例化NSData
if let personalInfo = self.scanResult?.fields{
if let encodedString = personalInfo["Photo"] as? String{
let image = NSData(base64EncodedString: encodedString,options: NSDataBase64DecodingOptions(rawValue:0))
}
}
答案 1 :(得分:0)
我认为最简单的解决方案是检查字典键数是否大于0.例如:
let dictionary: Dictionary<String, AnyObject> = Dictionary()
if dictionary.keys.count > 0 {
// This mean dictionary has values.
}
答案 2 :(得分:0)
您可以使用字典的“计数”。见代码。
if let personalInfo = self.scanResult?.fields {
if personalInfo.count > 0 {
if let base64ImageString = personalInfo["Photo"] as? String {
if let image = NSData(base64EncodedString: base64ImageString, options: NSDataBase64DecodingOptions(rawValue: 0)) {
// do your stuff with image
}
}
}
}
答案 3 :(得分:0)
问题是self.scanResult.fields是NSNull。所以我找到了解决问题的这三种方法。
func isNotNull(object:AnyObject?) -> Bool {
guard let object = object else {
return false
}
return (isNotNSNull(object) && isNotStringNull(object))
}
func isNotNSNull(object:AnyObject) -> Bool {
return object.classForCoder != NSNull.classForCoder()
}
func isNotStringNull(object:AnyObject) -> Bool {
if let object = object as? String where object.uppercaseString == "NULL" {
return false
}
return true
}
我只是这样打电话:
if self.isNotNSNull((self.scanResult?.fields)!
{
}