我正在使用 healthkit 并获得读取数据的权限。当要求 5 种数据类型时,这很好。虽然,当再添加一个时,它会给我错误The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
。这是代码
let healthkitTypesToRead = NSSet(array: [
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.height) ?? "",
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyMass) ?? "",
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate) ?? "",
HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.sleepAnalysis) ?? "",
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bloodPressureDiastolic) ?? "",
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bloodPressureSystolic) ?? ""
]
)
目前尚不清楚您为什么注入?? ""
此代码。这似乎毫无意义(它说“如果我不能添加这个数量类型,那么添加一个字符串,这是没有意义的)。我想你的意思是“如果它们不是零,我只想添加这些,实际上它们应该是,但是!
如果我错了,我不想添加并崩溃。”如果这就是您的意思,那么这就是您的意思:
let healthkitTypesToRead = Set<HKObjectType>([
.quantityType(forIdentifier: .height),
.quantityType(forIdentifier: .bodyMass),
.quantityType(forIdentifier: .heartRate),
.categoryType(forIdentifier: .sleepAnalysis),
.quantityType(forIdentifier: .bloodPressureDiastolic),
.quantityType(forIdentifier: .bloodPressureSystolic),
].compactMap { $0 }
)
但是,这些都是编译时常量。如果其中任何一个失败,那真的是一个编程错误。这是一个!
合适的点,所以我个人会这样写(但这只是意见和风格的问题):
let healthkitTypesToRead = Set<HKObjectType>([
.quantityType(forIdentifier: .height)!,
.quantityType(forIdentifier: .bodyMass)!,
.quantityType(forIdentifier: .heartRate)!,
.categoryType(forIdentifier: .sleepAnalysis)!,
.quantityType(forIdentifier: .bloodPressureDiastolic)!,
.quantityType(forIdentifier: .bloodPressureSystolic)!,
]
)
注意我已经替换NSSet
为Set
. 除非你有非常强烈的理由,否则你不应该NSSet
在这里使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句