FileManager MoveItem 回调 - Swift
Posted
技术标签:
【中文标题】FileManager MoveItem 回调 - Swift【英文标题】:FileManager MoveItem Callback - Swift 【发布时间】:2018-07-31 08:50:56 【问题描述】:我正在使用 FileManager 在我的应用程序中编辑、移动和删除文件。但是如何确定方法 moveItem 已完成?有没有可能的回调?我读了一些关于 FileManagerDelegate 的东西,但我没有找到足够的信息来使用它。 谢谢
【问题讨论】:
【参考方案1】:moveItem(at:to:)
方法是同步的,这意味着在操作完成之前它不会继续执行任何代码行。在 Swift 中,它也是 throws
,所以如果它给你一个错误,你就知道出了问题,如果它继续前进,一切都很好。你应该这样称呼它:
do
try FileManager.default.moveItem(at: origURL, to: newURL)
catch let error
// Handle any errors here
dump(error)
在 Objective-C 中,它返回一个 BOOL
指定操作是否成功,并采用传递引用 NSError
如果出现问题,它将进行配置。例如:
NSError *error = nil;
BOOL success = [[NSFileManager defaultManager] moveItemAtURL:origURL toURL:newURL error:&error];
if(!success || error)
// Something went wrong, handle the error here
else
// Everything succeeded
【讨论】:
它是同步的,但您仍然可以将工作分派到另一个队列并将完成分派回主队列。检查我的答案。 你可以这样做,但如果你只是在呼叫站点处理队列和之后的任何代码,最终它会更容易/更清晰/更可配置的 imo 我想说的是这种工作不属于主线程(在我的选择中)。在哪里处理队列取决于开发人员。【参考方案2】:您可以扩展您的 FileManager
以添加一些方法以更方便:
extension FileManager
func moveItem(at url: URL, toUrl: URL, completion: @escaping (Bool, Error?) -> ())
DispatchQueue.global(qos: .utility).async
do
try self.moveItem(at: url, to: toUrl)
catch
// Pass false and error to completion when fails
DispatchQueue.main.async
completion(false, error)
// Pass true to completion when succeeds
DispatchQueue.main.async
completion(true, nil)
然后这样称呼它:
FileManager.default.moveItem(at: atUrl, toUrl: toUrl) (succeeded, error) in
if succeeded
// Success
else
// Something went wrong
【讨论】:
以上是关于FileManager MoveItem 回调 - Swift的主要内容,如果未能解决你的问题,请参考以下文章
请问fckeditor的filemanager(java)中,上传完文件后怎么返回文件名到页面上去啊?
无法使用回调方法更改 ASPxFileManager 控件的 RootFolder