作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
看下面两个使用相同代码的场景:
使用 IF LET:
public func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?){
if let error = error {
print("error: \(error.localizedDescription)")
return
}
for service in peripheral.services!
{
print("discovered service is ::::",service)
}
}
使用 GUARD LET:
public func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?){
guard let _ = error else{
for service in peripheral.services!
{
print("discovered service is ::::",service)
}
return
}
}
它们都使用return 语句
,它们的用途相同,那么有什么区别,哪个更好?
编辑:-
问题是一般性的陈述,使用其中任何一个都很好,但是当我们有错误来处理哪个最好使用时?
最佳答案
首先,它们都没有得到正确实现。
peripheral.services!
中,如果 services
为 nil,它将崩溃。if-let
中删除,一切都会正常进行guard
优于 if-let
的好处是它减少了 if-else
括号,从而产生更多可读代码 guard
,考虑if-let
,您只能在 block 内使用未包装的变量。if-let
进行少量变量解包,并且解包变量的值不需要在 block 范围之外guard-else
在 block 作用域外使用解包变量error
对象(guard block 的主要用途)然后使用guard-else
否则使用if-让
。关于ios - IF LET 与 GUARD LET 中的返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45937461/
我是一名优秀的程序员,十分优秀!