我想接触Swift和HealthKit。我跟着 this tutorial,但在要求HealthKit权限时遇到问题。我已经搜索了这个问题,这在转换到Swift 2时很常见,但我只是模糊地理解了这个问题。 这是代码:
let healthKitTypesToRead = Set(arrayLiteral:[
HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth),
HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBloodType),
HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex),
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass),
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight),
HKObjectType.workoutType()
])
我得到的错误是"表达的类型是不明确的,没有更多的上下文"。我实际上只需要一个元素,我可以完全跳过数组创建吗? 我试图解决它,但我没有能够在没有编译器错误的情况下匹配该类型。是的,我搜索堆栈溢出但我还没能解决它。 谢谢你的帮助。
答案 0 :(得分:3)
编译器无法推断您传入文字HKCharacteristicType?
,HKQuantityType?
和HKWorkoutType
的3种不同类型的类型。您需要将集的类型设置为HKObjectType
,并在保证返回非零值时显式解包。如果不保证存在这些值,那么最好在添加到集合之前检查nil
的每个值。
let healthKitTypesToRead: Set<HKObjectType> = [
HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!,
HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBloodType)!,
HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)!,
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!,
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!,
HKObjectType.workoutType()
]