2015-10-12 4 views
0

Я пытаюсь читать данные с помощью HealthKit, но сохраняющий получать тот же вопрос, когда я запускаю этот код:Значение типа HKHealthStore не имеет типа dateOfBirthWithError

func readAge() -> (age:Int?) 
{ 
    var error:NSError? 
    var age:Int? 

    // 1. Request birthday and calculate age 
    if let birthDay = healthKitStore.dateOfBirthWithError(&error) 
    { 
     let today = NSDate() 
     let calendar = NSCalendar.currentCalendar() 
     let differenceComponents = NSCalendar.currentCalendar().components(.YearCalendarUnit, fromDate: birthDay, toDate: today, options: NSCalendarOptions(0)) 
     age = differenceComponents.year 
    } 
    if error != nil { 
     print("Error reading Birthday: \(error)") 
    } 

    return (age) 
} 

Это дает мне ошибку: Value of type HKHealthStore has no type dateOfBirthWithError

I не могу понять, почему это не работает, потому что я видел практически то же самое, что и в других местах.

ответ

0

В Swift 2.0 методы, которые принимают параметры отказа, обрабатываются иначе, чем в Swift 1.0 и Objective-C. Имя метода равно dateOfBirth, и оно выдает NSError, с которым вы можете обращаться с оператором try.

1

С Swift 2 вы можете сделать это следующим образом:

func readAge() -> (age:Int?) 
{ 
    var error:NSError? 
    var age:Int? 

    do { 
     let birthDay = try healthKitStore.dateOfBirth() 
     let today = NSDate() 
     let calendar = NSCalendar.currentCalendar() 
     let differenceComponents = NSCalendar.currentCalendar().components(NSCalendarUnit.Year, fromDate: birthDay, toDate: today, options: NSCalendarOptions(rawValue: 0)) 
     age = differenceComponents.year 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 

    return (age) 
} 
+0

Спасибо за код. Заслуженный +1 –

Смежные вопросы