Swift 4 / Xcode 9.3 / iOS - 捕获文件“x”无法打开,因为没有带有 String(contentsOf: url) 的此类文件

dre*_*ter 3 string try-catch swift

斯威夫特 4 / Xcode 9.3 / iOS

\n\n

我正在使用String(contentsOf: url),在某些情况下我会收到错误,因为 URL 引用的文件不存在。我想处理特定的错误情况。

\n\n

我知道我可以先检查文件是否存在,但我想改为处理错误情况。

\n\n

现在我正在做:

\n\n
let data = try String(contentsOf: url)\n
Run Code Online (Sandbox Code Playgroud)\n\n

到目前为止,我一直在捕获所有错误,例如:

\n\n
do {\n    let data = try String(contentsOf: url)\n    //<other code here>\n} catch let error {\n    fatalError("bad error: \\(error)")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我尝试从中提取的特定文件(从给定的 URL)不存在时,我会收到如下错误:

\n\n
bad error: Error Domain=NSCocoaErrorDomain Code=260 "The file \xe2\x80\x9cwhatever.json\xe2\x80\x9d couldn\xe2\x80\x99t be opened because there is no such file." UserInfo={NSFilePath=/Users/myname/Library/Developer/CoreSimulator/Devices/6529F22A-5234-49D7-9BB3-B9C71474CC53/data/Containers/Data/Application/005C1F55-07E8-4CF4-86FD-2F00B1144FD4/Documents/whatever.json, NSUnderlyingError=0x608000058180 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何单独捕获此错误,以便将其与其他错误分开处理?我已经尝试过CocoaError.fileNoSuchFile和 POSIX 错误域中的几个。

\n\n

谢谢!

\n

dre*_*ter 6

好吧,我已经为此奋斗了一段时间,当我发布后,我最终解决了这个问题。

答案是CocoaError.fileReadNoSuchFile。我一直在尝试CocoaError.fileNoSuchFile

答案如下:

do {
    let data = try String(contentsOf: url)
    //<other code here>
} catch CocoaError.fileReadNoSuchFile {
    print("CAUGHT IT!")
} catch let error {
    fatalError("bad error: \(error)")
}
Run Code Online (Sandbox Code Playgroud)

谢谢!