0

ここにあるヘルスキットのチュートリアルに従っています

古いバージョンの Swift (1.2) を使用しており、最新バージョン (この記事の執筆時点では Swift 2.2) に変換しようとしています。

エラーは、処理を行う必要があることを示していますdo, catch, and tryが、それでも同じエラーがスローされますCall can throw, but it is not marked with 'try' and the error not handledか?

以下に私の試みを追加しました。Swift 2.2 では、最新のものを使用してエラーをチェックする必要がありますif error != nilか? それとも、do, catch, try今の取り扱いで扱われるのでしょうか?

var error:NSError?
var age:Int?

// 1. Request birthday and calculate age
if let birthDay = healthKitStore.dateOfBirth()
{
  do {
    let today = NSDate()
    let calendar = NSCalendar.currentCalendar()
    let differenceComponents = NSCalendar.currentCalendar().components(.CalendarUnitYear, fromDate: birthDay, toDate: today, options: NSCalendarOptions(0) )

    try! age = differenceComponents.year

  } catch {
    print(error)
  }
}
if error != nil {
  print("Error reading Birthday: \(error)")
}
4

1 に答える 1

5

メソッドがスローされたときに、do try catch Swift2 エラー処理メソッドを実装する必要があります。エラーは常に処理する必要があります。絶対に失敗しないと確信している場合は、try! を使用できます。エラーを処理したくない場合は、試してみてください。

このようにしてみてください:

var age: Int?
do {
    // 1. Request birthday and calculate age
    let birthDay = try healthKitStore.dateOfBirth()
    age = NSCalendar.currentCalendar().components(.Year, fromDate: birthDay, toDate: NSDate(), options: []).year
} catch let error as NSError {
    print(error.localizedDescription)
}
于 2016-03-25T05:24:35.753 に答える