A colossal Dreamer: GR鐵塔-天生我材

Cocoa NSError 를 swift 에서 다루기 본문

Development/아이폰

Cocoa NSError 를 swift 에서 다루기

江多林 2023. 1. 11. 19:05
Error Domain=NSCocoaErrorDomain
    Code=260
    "파일이 존재하지 않기 때문에 ‘xxx’ 파일을 열 수 없습니다."
    UserInfo={
    	NSFilePath=/var/mobile/Containers/Data/Application/xxx, 
        NSUnderlyingError=0x106ef7da0 {
        	Error Domain=NSPOSIXErrorDomain
            Code=2
            "No such file or directory"
        }
    }

 

swift 에서 NSError 잡는 깔끔한 방법

do {
    try fileManager.moveItem(at: fromURL, to: toURL)
} catch CocoaError.fileNoSuchFile {
    print("Error: no such file exists")
} catch CocoaError.fileReadUnsupportedScheme {
    print("Error: unsupported scheme (should be 'file://')")
}

NSError 의 코드는 아래와 같이 NS_ERROR_ENUM 으로 정의되어 위와 같이 접근이 가능하다.

NS_ERROR_ENUM(NSCocoaErrorDomain) {
    // File system and file I/O related errors, with NSFilePathErrorKey or NSURLErrorKey containing path or URL
    NSFileNoSuchFileError = 4,                                              // Attempt to do a file system operation on a non-existent file
    NSFileLockingError = 255,                                               // Couldn't get a lock on file
    NSFileReadUnknownError = 256,                                           // Read error (reason unknown)
    NSFileReadNoPermissionError = 257,                                      // Read error (permission problem)
    NSFileReadInvalidFileNameError = 258,                                   // Read error (invalid file name)
    NSFileReadCorruptFileError = 259,                                       // Read error (file corrupt, bad format, etc)
    NSFileReadNoSuchFileError = 260,                                        // Read error (no such file)
	.....
 };

NSCocoaErrorDomain 으로부터 Swift 자동생성된 코드

extension CocoaError {

    public static var fileNoSuchFile: CocoaError.Code { get }

    public static var fileLocking: CocoaError.Code { get }

    public static var fileReadUnknown: CocoaError.Code { get }

    public static var fileReadNoPermission: CocoaError.Code { get }

    public static var fileReadInvalidFileName: CocoaError.Code { get }

    public static var fileReadCorruptFile: CocoaError.Code { get }

    public static var fileReadNoSuchFile: CocoaError.Code { get }

    public static var fileReadInapplicableStringEncoding: CocoaError.Code { get }

    public static var fileReadUnsupportedScheme: CocoaError.Code { get }

    @available(macOS 10.5, iOS 2.0, *)
    public static var fileReadTooLarge: CocoaError.Code { get }

	...
}

참조: https://developer.apple.com/documentation/swift/handling-cocoa-errors-in-swift