Swift Call可以抛出,但它没有标记为'try'并且没有处理错误

时间:2015-11-20 16:04:53

标签: swift

代码:

if !NSFileManager.defaultManager().fileExistsAtPath(url.path!) {
    let sourceSqliteURLs = [NSBundle.mainBundle().URLForResource("CoreDataDemo", withExtension: "sqlite")!, NSBundle.mainBundle().URLForResource("CoreDataDemo", withExtension: "sqlite-wal")!, NSBundle.mainBundle().URLForResource("CoreDataDemo", withExtension: "sqlite-shm")!]

    let destSqliteURLs = [self.applicationDocumentsDirectory.URLByAppendingPathComponent("CoreDataDemo.sqlite"),
        self.applicationDocumentsDirectory.URLByAppendingPathComponent("CoreDataDemo.sqlite-wal"),
        self.applicationDocumentsDirectory.URLByAppendingPathComponent("CoreDataDemo.sqlite-shm")]

    var error:NSError? = nil
    for var index = 0; index < sourceSqliteURLs.count; index++ {
        NSFileManager.defaultManager().copyItemAtURL(sourceSqliteURLs[index], toURL: destSqliteURLs[index])
        //showing error at this line             
    }
}

编译器在try和catch块中期待NSFileManager。我不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

要使用copyItemAtURL功能,您可以执行以下三项操作之一。

1)尝试/捕捉

do {
    try NSFileManager.defaultManager.copyItemAtURL(sourceSqliteURLs[index], toURL: destSqliteURLs[index])
} catch {
    print(error)
}

这是标准的错误处理方法。您的所有代码都将放在do块中,包括try语句,并且任何错误都将在catch块中处理。

2)try!

try! NSFileManager.defaultManager()...

如果try!引发错误,则会导致运行时崩溃。

3)try?

 try? NSFileManager.defaultManager()...

呼叫将成功或呼叫结果为零。没有错误抛出,没有崩溃。

我建议你阅读文档,这一切都非常明确。