FileManager MoveItem回调-Swift

时间:2018-07-31 08:50:56

标签: ios swift delegates file-manager

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

2 个答案:

答案 0 :(得分:3)

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
}

答案 1 :(得分:0)

您可以扩展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
    }
}