Swift 2.2 HealthKit — вызов может бросить вызов, но он не помечен как «попытка», и ошибка не обрабатывается

Я следую руководству по аптечке, которое можно найти здесь.

Он использует более старую версию 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)")
}

person Simon    schedule 25.03.2016    source источник


Ответы (1)


Вам нужно реализовать метод обработки ошибок do try catch Swift2, когда метод выбрасывает. Вы всегда должны обрабатывать ошибки. Если вы уверены, что это никогда не подведет, вы можете использовать try! и если вы не хотите обрабатывать ошибку, вы можете использовать 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)
}
person Leo Dabus    schedule 25.03.2016
comment
Это исправлено, спасибо Лео! Было ли это так просто исправить ошибку? Я не мог понять документы, когда и где использовать метод try (иногда я также вижу, что он принудительно try!? Есть ли хороший ресурс для лучшего понимания этого? - person Simon; 25.03.2016