Ios 如何在Swift 2.0中检测空字典而不崩溃?
我试图检测来自API的字典是否为空或是否有值,但每当我尝试执行Dict.count时,它就会崩溃Ios 如何在Swift 2.0中检测空字典而不崩溃?,ios,swift2,nsdictionary,Ios,Swift2,Nsdictionary,我试图检测来自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: NSDataBase64DecodingOptio
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,它也在那里崩溃了。在尝试使用它之前,你应该先打开personalInfo[“Photo”]。通过这种方式,您可以确保在没有照片密钥值的情况下不会尝试实例化NSData
if let personalInfo = self.scanResult?.fields{
if let encodedString = personalInfo["Photo"] as? String{
let image = NSData(base64EncodedString: encodedString,options: NSDataBase64DecodingOptions(rawValue:0))
}
}
我认为最简单的解决方案是检查字典键计数是否大于0。例如:
let dictionary: Dictionary<String, AnyObject> = Dictionary()
if dictionary.keys.count > 0 {
// This mean dictionary has values.
}
let dictionary:dictionary=dictionary()
如果dictionary.keys.count>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
}
}
}
}
问题是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)!
{
}
我对Swift不是很在行,但看起来你正试图制作一个包含0个数据的图像-为什么?我认为,制作一个只有“0”作为数据的图像将是无用的,而且从定义上讲必然会崩溃。。。我遗漏了什么吗?首先你应该检查你的Dic obj是否为nil,如果不是nil,你可以用这个调用count方法。我不想走那么远,当我看到字典中的值数为0时,就停下来。我应该怎么做?什么类型是self.scanResult?字段?如果它确实是一本swift字典,那么您可以通过personalInfo.count方法检查计数