为什么在其他方面没有工作呢?

时间:2017-02-18 13:36:08

标签: swift

以下代码出现以下错误:Missing return in a function expected to return 'String'

var description: String {
    get{
        if(pending == nil){
            return "a"
        }
        else{
            if let op = internalProgram.last as? String{
                if operations[op] != nil {
                    return "b"
                }
            }
            else {
                return "c"
            }
        }
    }
}

但是,如果我删除了最后一个else而只是离开return "c",那么它可以正常工作。

var description: String {
    get{
        if(pending == nil){
            return "a"
        }
        else{
            if let op = internalProgram.last as? String{
                if operations[op] != nil {
                    return "b"
                }
            }
            return "c"
        }
    }
}

为什么第一个代码没有工作?他们没有相同的功能吗?不会达到最后的回报声明吗?在第一个代码中,如果其他所有内容都不起作用,则会执行最后一个return语句。

2 个答案:

答案 0 :(得分:1)

对于操作[op]为零的情况,您不会返回任何内容。

if let op = internalProgram.last as? String{
                if operations[op] != nil {
                    return "b"
                } else {
// return something else here....
            }

答案 1 :(得分:0)

因为你错过了一个条件,如果operations[op] == nil

怎么办?
var description: String {
    get{
        if(pending == nil){
            return "a"
        }
        else{
            if let op = internalProgram.last as? String{
                if operations[op] != nil {
                    return "b"
                }
                // what's the return value here?
            }
            else {
                return "c"
            }
        }
    }
}

另一方面,您可以缩短代码,使其对人类和机器更具可读性:

var description: String {
    if pending == nil {
        return "a"
    } else if let op = internalProgram.last as? String, operations[op] != nil {
        return "b"
    } else {
        return "c"
    }
}