当前位置:  开发笔记 > 编程语言 > 正文

你如何在Swift函数中放置一个guard语句?

如何解决《你如何在Swift函数中放置一个guard语句?》经验,为你挑选了1个好方法。

我不明白为什么你不能在返回函数内部有一个守护声明.

func sayHello(text: String?) -> String {
    guard let whatever = text else {
        ...
        return
    }
    return "aString"
}

为什么以上不正确?Xcode returnguard闭包语句中给出了错误"非void函数应该返回一个值" ,就像它认为return语句是函数的return语句一样.你怎么一个区分guardreturn语句和函数的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示例中)breakcontinue,两者都没有.

谢谢!



1> pbush25..:

这里的重点是......你不能在执行完成处理程序内部返回.在第二种情况下,如果要返回关于完成处理程序结果的布尔值,则必须创建一个局部变量,将其设置在处理程序的结果中,然后将其返回到处理程序之外.至于你面临的第一个问题,Xcode抱怨是因为你已经声明函数返回一个字符串,但是在你的else语句中你试图返回void,这违反了函数的返回类型.你可以做你想做的事,但你必须至少返回一个空字符串.


@Jake:你*可以*在`do`-block中放一个`guard`语句,然后else case突破do-block而不是从函数返回.但是`如果让'更简单......
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有