我return在Swift中感到困惑.我知道它用于返回函数中的值,如果像这样使用:
func double(value: int) -> Int {
return value * 2
}
Run Code Online (Sandbox Code Playgroud)
但我经常只是看到return被使用,就像在这样guard的可选绑定中的语句:
guard let value = value else (
print ("nothing")
return
}
Run Code Online (Sandbox Code Playgroud)
那么return在这样的guard声明中有什么目的呢?实际上,我经常guard在展开可选值时在语句中看到这一点.当我想使用字典中的可选字符串时,我总是在编写代码时发现这个问题.
let info = ["name": "sarah", "hometown": "sydney"]
class UserInfo {
func getTheName() -> String {
guard let name = info["name"] else { return }
return name
}
}
// Compile time error: "Non-void function should return a value"
Run Code Online (Sandbox Code Playgroud)
即使我写过,我也会收到此错误return name.Xcode仍抱怨我没有返回值.是因为return在guard声明中吗?
那么,你能告诉我returnSwift 的目的吗?这对我来说很困惑.
return没有任何参数返回Void.这种形式的return语句只能与返回的函数一起使用Void.
一旦return语句执行,函数退出,并在功能上没有更多的代码执行.由于你return在guard语句中有一个,所以第二个return name不会被执行(因为它没有返回的名字,所以无法执行),这就是你得到编译器错误的原因; 编译器会查看函数可以返回的所有路径,并确保所有这些路径都返回函数签名所说的内容.
你的问题中的函数表明它返回一个String,所以你不能简单地return在guard语句中说,因为它返回Void,违反了你的函数签名所表达的契约.
您可以返回不是的默认值Void:
func getTheName () -> String {
guard let name = info["name"] else {
return ""
}
return name
}
Run Code Online (Sandbox Code Playgroud)
这可以使用nil-coalescing运算符更简洁地编写;return info["name"] ?? ""
您还可以return在返回的函数中使用Void(或者没有显式的返回类型,在这种情况下,它被隐含地理解为返回Void)
所以你可以有一个像这样的功能:
func maybePrint(theMessage: String?) -> Void {
guard let msg = theMessage else {
return
}
print(msg)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2149 次 |
| 最近记录: |