我不明白为什么你不能在回归函数中有一个警卫声明。
func sayHello(text: String?) -> String {
guard let whatever = text else {
...
return
}
return "aString"
}
为什么以上不正确? Xcode给出了错误"非void函数应该返回一个值"在return
闭包中的guard
语句中,就像它认为return
语句是函数的return
语句一样。您如何区分guard
' return
声明和函数的return
声明?
同样的事情发生在不返回的完成处理程序中:
func anotherFunction() -> Bool {
aFunction("hello", completion: { (status) -> Void in
if status == "good" {
return true // I want anotherFunction() to return this not the handler
} else {
return false
}
})
}
Xcode认为我正在尝试让void完成处理程序返回Bool
,而我希望函数根据完成处理程序的结果返回Bool
。
我想我明白为什么你不能在完成处理程序示例中执行此操作,但是你应该能够在非void函数中有一个guard语句。我尝试将return
(在guard
示例中)替换为break
和continue
,两者均无效。
谢谢!
答案 0 :(得分:12)
这里的重点是......你不能在完成处理程序的执行内部返回。在第二种情况下,如果要返回关于完成处理程序结果的布尔值,则必须创建一个局部变量,将其设置在处理程序的结果中,然后将其返回到处理程序之外。至于你面临的第一个问题,Xcode抱怨是因为你已经声明函数返回一个字符串,但是在你的else语句中你试图返回void,这违反了函数的返回类型。你可以做你想做的事,但你必须至少返回一个空字符串。