TL; DR: Verwenden Sie Karthago, um https://github.com/eggheadgames/SwiftTryCatch einzuschließen, oder CocoaPods, um https://github.com/ravero/SwiftTryCatch einzuschließen .
Dann können Sie Code wie diesen verwenden, ohne befürchten zu müssen, dass Ihre App abstürzt:
import Foundation
import SwiftTryCatch
class SafeArchiver {
class func unarchiveObjectWithFile(filename: String) -> AnyObject? {
var data : AnyObject? = nil
if NSFileManager.defaultManager().fileExistsAtPath(filename) {
SwiftTryCatch.tryBlock({
data = NSKeyedUnarchiver.unarchiveObjectWithFile(filename)
}, catchBlock: { (error) in
Logger.logException("SafeArchiver.unarchiveObjectWithFile")
}, finallyBlock: {
})
}
return data
}
class func archiveRootObject(data: AnyObject, toFile : String) -> Bool {
var result: Bool = false
SwiftTryCatch.tryBlock({
result = NSKeyedArchiver.archiveRootObject(data, toFile: toFile)
}, catchBlock: { (error) in
Logger.logException("SafeArchiver.archiveRootObject")
}, finallyBlock: {
})
return result
}
}
Die von @BPCorp akzeptierte Antwort funktioniert wie beabsichtigt, aber wie wir festgestellt haben, werden die Dinge ein wenig interessant, wenn Sie versuchen, diesen Objective C-Code in ein mehrheitliches Swift-Framework zu integrieren und dann Tests ausführen. Wir hatten Probleme damit, dass die Klassenfunktion nicht gefunden wurde ( Fehler: Verwendung eines nicht aufgelösten Bezeichners ). Aus diesem Grund und nur zur allgemeinen Benutzerfreundlichkeit haben wir es als Karthago-Bibliothek für den allgemeinen Gebrauch verpackt.
Seltsamerweise konnten wir das Swift + ObjC-Framework problemlos an anderer Stelle verwenden. Es waren nur die Komponententests für das Framework, die Probleme hatten.
PRs angefordert! (Es wäre schön, wenn es eine Kombination aus CocoaPod und Karthago wäre und einige Tests hätte).