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 并不总是被调用