声明数组时出现编译器错误:编译器无法对...不同的子表达式进行类型检查

雅各布办公室

我正在使用 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)!,
    ]
)

注意我已经替换NSSetSet. 除非你有非常强烈的理由,否则你不应该NSSet在这里使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章