我不明白为什么你不能在返回函数内部有一个守护声明.
func sayHello(text: String?) -> String { guard let whatever = text else { ... return } return "aString" }
为什么以上不正确?Xcode return
在guard
闭包语句中给出了错误"非void函数应该返回一个值" ,就像它认为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
,两者都没有.
谢谢!
这里的重点是......你不能在执行完成处理程序内部返回.在第二种情况下,如果要返回关于完成处理程序结果的布尔值,则必须创建一个局部变量,将其设置在处理程序的结果中,然后将其返回到处理程序之外.至于你面临的第一个问题,Xcode抱怨是因为你已经声明函数返回一个字符串,但是在你的else语句中你试图返回void,这违反了函数的返回类型.你可以做你想做的事,但你必须至少返回一个空字符串.