Swift switch default + fallthrough: 缺少 return 预期 return 'String' 的功能

Swift switch default + fallthrough: missing return in a function expected to return 'String'

我有以下代码:

func messageForError(error: ApiErrorType)->String{
    switch (error){
    case .ApiError(let apiMessage):
        if let newMessage = apiMessage{
            return newMessage
        }
    case .NoInternetError:
        return "Não foi possível estabelecer conexão com o servidor. Você está conectado à internet?"

    case .RequestError:
        fallthrough
    default:
        return "Não se preocupe, já demitimos o estágiario. \nDeseja tentar novamente?"
    }
}

但是编译器打印出以下错误:

在预期 return 'String'

的函数中缺少 return

开关有一个默认值,所以所有的情况都被处理了,我遗漏了什么或者Swift编译器不是那么聪明?

如果我删除了 fallthrough,编译器会编译而不会出现任何错误:

    func messageForError(error: ApiErrorType)->String{
    switch (error){
    case .ApiError(let apiMessage):
        if let newMessage = apiMessage{
            return newMessage
        }
    case .NoInternetError:
        return "Não foi possível estabelecer conexão com o servidor. Você está conectado à internet?"
    default:
        return "Não se preocupe, já demitimos o estágiario. \nDeseja tentar novamente?"
    }
}

不清楚你有没有想出来。问题不在于您没有在 switch 语句中涵盖所有基础。它不是所有的代码路径 return 一个值。在 ApiError 的情况下,如果测试失败,则不会执行 return。如果您在此测试后放置 return,代码将编译。