Li *_*min 15 ios deferred swift
这有什么区别:
_ = navigationController?.popViewController(animated: true)
defer {
let rootVC = navigationController?.topViewController as? RootViewVC
rootVC?.openLink(url: url)
}
return
Run Code Online (Sandbox Code Playgroud)
还有这个:
_ = navigationController?.popViewController(animated: true)
let rootVC = navigationController?.topViewController as? RootViewVC
rootVC?.openLink(url: url)
return
Run Code Online (Sandbox Code Playgroud)
Apple的快速指南说:"在代码执行离开当前代码块之前,使用defer语句执行一组语句.",但我仍然不太明白.
mat*_*att 32
在退货之前,延期声明和声明之间的区别是什么?
世界上所有的差异.该defer声明在返回后执行!这使您可以完成可以通过其他方式完成的事情(如我在此演示).
此外,正如已经指出的那样,count无论你如何退出,都会执行该声明.无论你退出当前范围,它都可以工作,这可能根本不涉及count; defer适用于函数体,while块,if结构,do块等.单个return不是退出这样一个范围的唯一方法!defer您的方法中可能有多个,和/或您可能会抛出错误,和/或您可能有return等等,或者您可能只是自然地到达范围的最后一行; 将return在每一个可能的情况下执行."手动"编写相同的代码,以便涵盖每个可能的退出,可能非常容易出错.
vad*_*ian 16
在你的例子中实际上没有区别,但请看这个:
func foo(url: URL) -> Int
let fileDescriptor : CInt = open(url.path, O_EVTONLY);
defer {
close(fileDescriptor)
}
guard let bar = something1() else { return 1 }
guard let baz = something2() else { return 2 }
doSomethingElse(bar, baz)
return 3
}
Run Code Online (Sandbox Code Playgroud)
close(fileDescriptor) 无论函数返回哪一行,总是执行.
defer语句用于在执行离开最近范围之前执行一段代码.
例如:
func defer() {
print("Beginning")
var value: String?
defer {
if let v = value {
print("Ending execution of \(v)")
}
}
value = "defer function"
print("Ending")
}
Run Code Online (Sandbox Code Playgroud)
将打印的第一行是:开始
将打印的第二行是:结束
将打印的最后一行是:结束延迟功能的执行.
| 归档时间: |
|
| 查看次数: |
7042 次 |
| 最近记录: |