An elegant way to ignore any errors thrown by a method

前端 未结 1 2012
长情又很酷
长情又很酷 2020-12-03 01:13

I\'m removing a temporary file with NSFileManager like this:

let fm = NSFileManager()
fm.removeItemAtURL(fileURL)
// error: \"Call can throw but         


        
相关标签:
1条回答
  • 2020-12-03 01:48

    If you don't care about success or not then you can call

    let fm = NSFileManager.defaultManager()
    _ = try? fm.removeItemAtURL(fileURL)
    

    From "Error Handling" in the Swift documentation:

    You use try? to handle an error by converting it to an optional value. If an error is thrown while evaluating the try? expression, the value of the expression is nil.

    The removeItemAtURL() returns "nothing" (aka Void), therefore the return value of the try? expression is Optional<Void>. Assigning this return value to _ avoids a "result of 'try?' is unused" warning.

    If you are only interested in the outcome of the call but not in the particular error which was thrown then you can test the return value of try? against nil:

    if (try? fm.removeItemAtURL(fileURL)) == nil {
        print("failed")
    }
    

    Update: As of Swift 3 (Xcode 8), you don't need the dummy assignment, at least not in this particular case:

    let fileURL = URL(fileURLWithPath: "/path/to/file")
    let fm = FileManager.default
    try? fm.removeItem(at: fileURL)
    

    compiles without warnings.

    0 讨论(0)
提交回复
热议问题