我正在尝试解析一个 .json 文件,但由于此错误,我无法完成它。我怎样才能避免这种情况?我搜索了一下,但找不到。 错误:"无法将类型为"__NSCFBoolean"(0x10da97608) 的值转换为"NSArray"(0x10da97e28)。
if (Dict["gorsel"] != nil) {
let gorsel = Dict["gorsel"] as! NSArray;
self.Image = gorsel[0] as! String as NSString;
self.ImageInfo = ImageSpecs(width: gorsel[1] as! Int, height: gorsel[2] as! Int);
self.ImageAvailable = true;
if (self.Image.lowercased.contains("ö") ||
self.Image.lowercased.contains("ç") ||
self.Image.lowercased.contains(" ") ||
self.Image.lowercased.contains("ğ") ||
self.Image.lowercased.contains("ş") ||
self.Image.lowercased.contains("ü") ||
self.Image.lowercased.contains("ı")) {
self.ImageAvailable = false;
}
}
错误:"无法将类型为"__NSCFBoolean"(0x10da97608) 的值转换为 'NSArray'(0x10da97e28)。
意味着您正在强制将布尔值转换为数组,这意味着Dict["gorsel"]是一个布尔值,您试图将其转换为引发异常和崩溃的数组。
为了避免这种崩溃,你应该玩关键词!和?。
哪里! 意味着我确定
? 表示我不确定
所以根据您的代码
let gorsel = Dict["gorsel"] as! NSArray;
你确定Dict["gorsel"] 将是一个数组,但真正的是一个布尔值。所以@kennytm
答案最好的方法是
if let gosrel = Dict["gorsel"] as? NSArray {
self.Image = gorsel[0] as! NSString as String
// etc.
}
你只是假设它是数组,并且只有在它得到一个非 nil 数组时才执行进一步的代码。
"无法将类型'__NSCFBoolean'(0x10da97608)的值转换为'NSArray'(0x10da97e28)。
__NSCFBoolean
是一个"布尔"对象。引发此错误是因为您要将布尔值强制转换为 NSArray,这表明此行有问题:
let gorsel = Dict["gorsel"] as! NSArray;
所以我们看到Dict["gorsel"]
实际上是一个布尔值(true
或false
),但你期望它是一个数组。
要么 JSON 是错误的,要么是代码暗示的假设是错误的。
如果你想同时处理数组和布尔情况,你可以使用as?
而不是as!
,这样当转换失败时,它只返回nil
而不是崩溃。
if let gosrel = Dict["gorsel"] as? NSArray {
self.Image = gorsel[0] as! NSString as String
// etc.
}