这似乎是我能找到的所有Swift闭包问题的相反问题!
我正在使用NSFilePromiseReceiver
将文件复制到应用程序的存储中。我想用一个临时目录来做这件事,我喜欢/经常使用Ole Begemann的临时目录模式:https://oleb.net/blog/2018/03/temp-file-helper/
所以,我会这样使用:
guard let tempDirectory = TemporaryDirectory() else { return }
promise.receivePromisedFiles(atDestination: temporaryDirectory.url, options: [:],
operationQueue: OperationQueue()) { fileURL, error in
...
}
在这里,我需要临时目录对象在闭包的生命周期中生存,但闭包并不明确需要它。
有没有办法强制闭包捕获目录?
如果我将[tempDirectory]
添加为捕获列表,我会收到一个编译器警告,说它没有被使用,并且测试显示它只是被捕获而不是。在闭包中对tempDirectory
调用一些不必要的操作是有效的,但这太可怕了。
有什么想法吗?
只是捕捉matt在评论中所说的话(以防他没有写更长的答案(。您想要withExtendedLifetime
:
...
operationQueue: OperationQueue()) { [tempDirectory] fileURL, error in
withExtendedLifetime(tempDirectory) { ... }
}
这创建了一个";用法";的tempDirectory
(这样您就不会收到警告(,并确保它在块结束之前不会被销毁。