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
,代码将编译。
我有以下代码:
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
,代码将编译。