首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileManager MoveItem回调- Swift

FileManager MoveItem回调- Swift
EN

Stack Overflow用户
提问于 2018-07-31 16:50:56
回答 2查看 2.7K关注 0票数 0

我正在使用FileManager编辑、移动和删除我的应用程序中的文件。但是如何确保moveItem方法已经完成呢?有没有可能的回调?我读到了一些关于FileManagerDelegate的东西,但我没有找到足够的信息来使用它。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 17:17:18

moveItem(at:to:)方法是同步的,这意味着在操作完成之前,它不会转移到任何代码行。在Swift中,它也是throws,所以如果它给你一个错误,你就知道出了问题,如果它继续前进,一切都会好起来的。你应该这样称呼它:

代码语言:javascript
复制
do{
    try FileManager.default.moveItem(at: origURL, to: newURL)
}
catch let error{
    // Handle any errors here
    dump(error)
}

在Objective-C中,它返回一个指定操作是否成功的BOOL,并接受一个引用传递NSError,如果出现错误,它将对其进行配置。例如:

代码语言:javascript
复制
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
}
票数 5
EN

Stack Overflow用户

发布于 2018-07-31 17:31:10

为了更方便起见,您可以扩展您的FileManager以添加一些方法:

代码语言:javascript
复制
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)
            }
        }
    }
}

然后这样叫它:

代码语言:javascript
复制
FileManager.default.moveItem(at: atUrl, toUrl: toUrl) { (succeeded, error) in
    if succeeded {
        // Success
    } else {
        // Something went wrong
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51609251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档