我正在尝试在break
语句中使用guard
,但编译器告诉我
'break'仅允许在循环内,if,do或switch
是否可以在此片段中编写类似内容(这只是一个MCV)?
func test(string: String?, x: Int) {
print("Function Scope BEGIN")
if x > 4 {
guard let pr = string else { break }
print(pr)
}
else {
print("Not")
}
print("Function Scope END")
}
答案 0 :(得分:9)
是的,这是可能的。您可以在循环内使用未标记的break
语句,但不能在if
块内使用。您可以使用带标签的break
语句。例如,此版本的代码将起作用:
func test(string: String?, x: Int) {
print("Function Scope BEGIN")
someLabel: if x > 4 {
guard let pr = string else { break someLabel }
print(pr)
}
else {
print("Not")
}
print("Function Scope END")
}
答案 1 :(得分:2)
如果guard-let位于循环内,则break
语句只能在guard let
内使用。
在您的使用案例中,我说您应该使用if-let
,因为return
的替代选项不是您想要的。
func test(string: String?, x: Int) {
print("Function Scope BEGIN")
if x > 4 {
if let pr = string { print(pr) }
}
else {
print("Not")
}
print("Function Scope END")
}