我有这个代码
guard let url = NSURL(string: urlString) else{
print("No URL")
return
}
return
语句产生错误
非无效函数应返回一个值
省略return
会给我下面的错误
'守卫'身体可能不会掉落,请考虑使用'return'或'break'退出范围
如何避免此错误?
答案 0 :(得分:2)
错误是说您的guard
语句在func()
内,期望返回值约为type
例如,在greet()
函数中,返回了String
……因此,guard
语句必须返回一个String
值。您必须从type
语句返回的值guard
取决于包含它的函数。
func greet(person: String, day: String) -> String {
guard person != "Homer" else {
return "Sorry, no Homer's allowed"
}
return "Hello \(person), have a great \(day)"
}
greet(person: "Homer", day: "Monday")
greet(person: "Douglas", day: "Thursday")
如果示例String
函数中未返回greet()
“对不起,不允许荷马允许”,您将看到相同的问题:
guard
语句只是为了防止其所包含的功能处于无法使用的状态。因此,return
的{{1}}语句只是早期guard
的一种形式因此,该函数必须返回与函数定义相同的类型。
在以上定义的return
函数中,指定返回一个greet()
(String
),因此-> String
的else块中的return
还必须返回一个guard
。