Swift 2.2 HealthKit - 调用可以抛出,但它没有标有“尝试”并且错误未处理

Posted

技术标签:

【中文标题】Swift 2.2 HealthKit - 调用可以抛出,但它没有标有“尝试”并且错误未处理【英文标题】:Swift 2.2 HealthKit - Call can throw, but it is not marked with 'try' and the error not handled 【发布时间】:2016-03-25 05:17:26 【问题描述】:

我正在关注here 找到的健康工具包教程

它使用的是旧版本的 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)")

【问题讨论】:

【参考方案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)

【讨论】:

这解决了它,谢谢 Leo!这是一个简单的错误修复吗?我无法理解何时何地使用 try 方法的文档(有时我看到它也强制使用 try!?是否有更好的资源来更好地理解这一点?

以上是关于Swift 2.2 HealthKit - 调用可以抛出,但它没有标有“尝试”并且错误未处理的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil

Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil

Swift HealthKit UpdateQuery 只被调用一次

Swift HealthKit UpdateQuery 只被调用一次

Swift HealthKit HKStatisticsCollectionQuery statisticsUpdateHandler 并不总是被调用

Swift HealthKit HKStatisticsCollectionQuery statisticsUpdateHandler 并不总是被调用