ios Swift 无法将类型"__NSCFBoolean"(0x10da97608) 的值转换为"NSArray"(0x10da97e28)



我正在尝试解析一个 .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"]实际上是一个布尔值(truefalse),但你期望它是一个数组。

要么 JSON 是错误的,要么是代码暗示的假设是错误的。

如果你想同时处理数组和布尔情况,你可以使用as?而不是as!,这样当转换失败时,它只返回nil而不是崩溃。

if let gosrel = Dict["gorsel"] as? NSArray {
self.Image = gorsel[0] as! NSString as String
// etc.
}

最新更新