ios Swift无法转换类型' __ NSCFBoolean' (0x10da97608)到' NSArray' (0x10da97e28)

时间:2017-04-03 16:59:18

标签: ios arrays json swift nsmutablearray

我正在尝试解析.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;
            }
        }

2 个答案:

答案 0 :(得分:0)

  

“无法将类型'__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.
}

答案 1 :(得分:0)

  

错误:"无法转换类型' __ NSCFBoolean' (0x10da97608)来   ' NSArray的' (0x10da97e28)"

表示您强制将布尔值强制转换为数组,这意味着 Dict [" gorsel"] 布尔值并且试图将强制转换为数组,这会引发异常并崩溃。

为避免此类崩溃,您应该使用关键字

其中!意味着我确定

<强>?意味着我不确定

根据您的代码

let gorsel = Dict["gorsel"] as! NSArray;

肯定 Dict [&#34; gorsel&#34;]将是一个数组,但实际上是布尔。所以 @kennytm

回答最好的方法是

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

你只是假设它是数组而另外代码执行只有如果它有一个非零数组