17048
Swift2では例外処理とかの記述が変わったらしいのですが、  
Objective-Cの次のコードの、Swift2での書き方がわかりません。  
どう書けばいいですか？

```

    NSFileManager *fm = [[NSFileManager alloc] init];
    [fm removeItemAtURL:newURL error:nil];
    
```
CC BY-SA 3.0
2015-09-28T10:20:12.030
17029
2015-10-16T16:10:01.497
2015-10-16T16:10:01.497
5519
12297
question
swift
Swift2では例外処理とかの記述が変わったらしいのですが、[fm removeItemAtURL:newURL error:nil];　はどう書けばいいですか？
```

    let fm = NSFileManager()
    do {
        try fm.removeItemAtPath(path)
    } catch let error as NSError {
        print(error.localizedDescription)
    }
    
```

このような感じですね。バリエーションとして、エラーを単に無視する `try? fm.removeItemAtPath(path)`
や、エラーがあった時にクラッシュする、 `try! fm.removeItemAtPath(path)` という書き方があります。 `try?` あるいは
`try!` を使うと `do~catch` ブロックは不要になります。

[Using Swift with Cocoa and Objective-CのError
Handlingについてのドキュメント](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10)にほぼ同じ内容が載っています。

参考:

<https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10>

<https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html>
CC BY-SA 3.0
2015-09-29T02:19:27.037
17048
2015-09-29T02:19:27.037
5519
17029
answer
Objective-
CからSwift2において、例外の記述方法が変更されましたが、末尾が`NSError**`の引数が、機械的に`throws`句に変換されるという対応になっています。

```

    NSFileManager *fm = [[NSFileManager alloc] init];
    [fm removeItemAtURL:newURL error:nil];
    
```

このコードを単に直訳した場合、

```

    let fm = NSFileManager()
    try? fm.removeItemAtURL(newUrl)
    
```

になります。もともとエラー内容を取得する`error:`の引数に、`nil`を渡しているためです。

* * *

エラーハンドリングの方法は以下の三通りあります。

  * **`do～catch`構文と`try`を利用して検査例外として扱う**  
エラー内容を`catch`句で取得して、具体的な処理を行う必要がある場合

  * **`try!`を利用して実行時例外として扱う**  
エラーの発生はプログラムの異常動作であり、アプリが強制終了するべきである場合

  * **`try?`を利用して例外が発生した場合には何もしない**  
エラーの内容は軽微であり無視しても良い場合（エラーの具体的な内容を知る術がない点には注意）
CC BY-SA 3.0
2015-09-29T14:07:21.780
17068
2015-09-29T14:07:21.780
5337
17029
answer