return后还会执行后边的代码
我们来看下边一个例子:
func test() -> Bool {print("1 test")return falseprint("2 test")
}func test2() {print("1 test2")returnprint("2 test2")
}test()
test2()输出:
1 test
1 test2
2 test2
可以发现在test2()方法中,return
后的 print("2 test2") 语句竟被触发了。
这是因为Swift不需要分号,Swift编译器可以自动推断下一行是换行还是旧行的补全。 print() 是一个返回void的函数。 因此语句:return print()
是有效的。
所以 test2方法等价于:
func test2() {print("1 test2")return print("2 test2")
}
如果return后有两条语句呢
func test2() {print("1 test2")return print("2 test2")print("3 test2")
}输出:
1 test2
2 test2
发现 print("3 test2") 语句也确实没有被执行,是因为 return print("2 test2") 语句代表这个方法已经结束了,后面的方法也就不会再执行。
其实这种情况下 Xcode是有系统警告的
print("2 test") Xcode报警告:
Expression following 'return' is treated as an argument of the 'return'print("3 test") Xcode报警告:
Code after 'return' will never be executed
怎么解决呢?
return语句不省略分号,给他添加上分号,告诉编译器语句已经结束了,就可以避免这个问题:
func test2() {print("1 test2")return;print("2 test2")print("3 test2")
}输出:
1 test2
总结:
I. 方法带返回值时,return 返回值 就是一个完整的语句,不会执行后续的方法。
II. 方法无返回值时,return后如果有语句,这条语句会被当作return的返回参数。
如果 return 后有两条语句,那么第一条会被当作return的返回语句执行,第二条语句就不会被执行,因为return语句 已经结束,方法体已经结束。