无法转换类型' Bool'的返回表达式返回类型' Bool'

时间:2016-06-16 23:01:30

标签: swift casting

这是一种特殊的废话,让我很好奇。我认为截图是最简单的方式来展示发生了什么。

这个错误似乎完全是胡说八道。我看到了区别"返回表达"和"返回类型"在错误中,但我不知道开发人员是否选择了有意义或者错误的语言。

enter image description here

谁能告诉我这里发生了什么?

修改

根据要求,我在隔离的Swift文件中创建了一个小测试用例:

func TestFunc(item: AnyObject) -> Bool {
    if !(item[1] as! Bool){
        return (item[2] as! Array).count > 0
    }

    return false
}

出了同样的错误。按照ColGraff的建议,为数组提供类型,我将代码更改为:

func TestFunc(item: AnyObject) -> Bool {
    if !(item[1] as! Bool){
        return (item[2] as! Array<AnyObject>).count > 0
    }

    return false
}

确实删除了错误消息,但到目前为止,没有一个回复回答了原始问题,以及错误消息实际意味着什么。

1 个答案:

答案 0 :(得分:1)

您的问题源于代码

item[2] as! Array

您需要指定数组中元素的类型。我假设它是AnyObject所以你应该这样做:

return (item[2] as! Array<AnyObject>).count > 0

但是,此代码中存在许多错误以及许多反模式。一个主要问题是您正在使用强制解包运算符!。如果可以的话,尽量避免使用它。您应该测试每个Optional并处理它是否已设置或未设置。

guard let item2 = item[2] as? [AnyObject] else { return false }
return !item2.isEmpty

这个问题比应该更难回答,因为你没有以Minimal, Complete, and Verifiable的方式发布代码。屏幕截图不是很有用,因为应答者必须重新输入您的代码,占用时间并可能引入错误。更不用说在发生任何调试之前,必须重现围绕错误的大部分代码。如果您让人们更容易回答您的问题,您将从本网站获得更多有用的信息。