与swift中的'return'功能混淆
我很快与'return'混淆。我明白,如果它是用来在函数返回值,如果是用这样的事情我了解与swift中的'return'功能混淆
func double (value: int) -> Int {
return value * 2
}
,但我经常看到的只是“回报”时,我的意思是在后卫声明类似的可选这样的绑定:
guard let value = value else (
print ("nothing")
return
}
那么,在这样的守卫声明中,只是'返回'的目的是什么?其实,我经常不仅看到可选绑定的警戒声明。在编写代码时,当我想使用可选的字符串,从字典
let info = ["name":"sarah","hometown":"sydney"]
class UserInfo {
func getTheName() -> String {
guard let name = info["name"] else {return}
return name
}
}
xcode error : non-void function should return a value (even though i
have written 'return name')
即使我已经写了“回归名字”
我一直觉得这个问题,但Xcode中仍然认为我还没有返回值。是否因为警戒声明中的“返回”?
那么,您能否告诉我快速返回的目的?这令我感到困惑。
return
没有任何参数返回Void
。这种形式的return
声明只能与返回Void
的函数一起使用。
执行return
语句后,该函数将退出并且您的函数中没有更多代码会执行。由于guard
语句中有return
,因此第二个return name
将不会执行(因为它没有返回名称,所以不会执行它),这就是为什么会出现编译器错误的原因;编译器会查看函数返回的所有路径,并确保所有这些路径返回函数签名所表示的路径。
在你的问题的功能状态,它返回一个String
,所以你不能简单地说return
在guard
语句返回Void
,侵犯了您的函数签名表达了合同。
你可以返回一个默认值不是Void
:
func getTheName() -> String {
guard let name = info["name"] else {
return ""
}
return name
}
这可能更加简洁使用未缴合并运算写的; return info["name"] ?? ""
您还可以使用return
在返回Void
一个函数(或没有明确的返回类型,在这种情况下,它隐含理解为返回Void
)
所以,你可以有这样一个功能:
func maybePrint(theMessage: String?) -> Void {
guard let msg = theMessage else {
return
}
print(msg)
}
你在正确的轨道上。
在getTheName()中的guard语句中,如果警卫失败,'return'关键字将尝试退出函数本身。但是该函数需要你返回一个字符串,因此你会得到编译器错误。
这里是另一部分,这样回答过类似的问题:
卫队你使用控制转移语句退出的范围。 有4个供您选择:
回报,扔都退出函数/方法继续可循环内使用 (在/为/重复,同时)破可循环使用 (在/为/重复同时)退出眼前的范围。指定 标签突破将让你一次(例如 打破了嵌套循环结构)退出多个范围。当使用标签时,break可以在范围内使用 。此外,您可以通过调用一个返回从不的函数(如fatalError)退出 。
Stack Overflow: If the Swift 'guard' statement must exit scope, what is the definition of scope?
以'guard'声明中,'let'语句作用域块的外面,所以你不能用它的'else'块内。 –