web-dev-qa-db-ja.com

Swift 3でのtryおよびthrowの処理

Swift 3の前に使用していたもの:

guard let data = Data(contentsOf: url) else {
                print("There was an error!)
                return
            }

ただし、今はdotry、およびcatchを使用する必要があります。私はこの構文に精通していません。この動作をどのように複製しますか?

41
KexAri

ここでの違いは、Data(contentsOf: url)はOptionalを返さず、スローすることです。

したがって、Do-Catchで使用できますが、guardは使用できません。

do {
    let data = try Data(contentsOf: url)
    // do something with data
    // if the call fails, the catch block is executed
} catch {
    print(error.localizedDescription)
}

guardの代わりにtry?tryを使用することもできますが、エラーメッセージは無視されます。この場合、Do-Catchブロックは必要ありません。

guard let data = try? Data(contentsOf: url) else {
    print("There was an error!")
    // return or break
}
// do something with data
107
ayaio