FileManager MoveItem 回调 - Swift
FileManager MoveItem Callback - Swift
我正在使用 FileManager 在我的应用程序中编辑、移动和删除文件。但是如何确定方法 moveItem 已完成?有回调的可能吗?我阅读了一些有关 FileManagerDelegate 的内容,但没有找到足够的信息来使用它。
谢谢
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 中,它 returns 一个 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
}
您可以扩展您的 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 已完成?有回调的可能吗?我阅读了一些有关 FileManagerDelegate 的内容,但没有找到足够的信息来使用它。 谢谢
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 中,它 returns 一个 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
}
您可以扩展您的 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
}
}