这有什么区别:
_ = navigationController?.popViewController(animated: true)
defer {
let rootVC = navigationController?.topViewController as? RootViewVC
rootVC?.openLink(url: url)
}
return
和这个:
_ = navigationController?.popViewController(animated: true)
let rootVC = navigationController?.topViewController as? RootViewVC
rootVC?.openLink(url: url)
return
Apple 的 swift 指南指出:“您可以使用 defer 语句在代码执行离开当前代码块之前执行一组语句。 ”,但我还是不太明白。
defer 语句和 return 之前的语句有什么区别?
世界上所有的差异。这defer
语句被执行after回报!这使您能够完成其他方式无法完成的事情。
例如,您可以返回一个值并then更改值。苹果公司经常使用这个技巧。例如,这里是序列文档中的代码,显示如何编写自定义序列:
struct Countdown: Sequence, IteratorProtocol {
var count: Int
mutating func next() -> Int? {
if count == 0 {
return nil
} else {
defer { count -= 1 }
return count
}
}
}
如果你把它写成
count -= 1
return count
...它会破裂;我们不想减少count
然后返回它,我们要返回count
然后递减它。
另外,正如已经指出的那样,defer
语句无论如何都会被执行how你退出。无论您退出当前状态,它都会起作用scope,这可能不涉及return
根本没有;defer
适用于函数体、while 块、if 构造、do 块等。单个return
并不是退出此类范围的唯一方法!可能有不止一个return
在你的方法中,和/或你可能会抛出一个错误,和/或你可能有一个break
等等,或者您可能会自然地到达范围的最后一行;这defer
在每种可能的情况下都会执行。 “手动”编写相同的代码以覆盖每个可能的出口可能非常容易出错。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)