Swift和HealthKit:没有更多上下文的表达式太模糊

时间:2016-01-04 20:32:24

标签: ios swift swift2 health-kit

我想接触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()
  ])

我得到的错误是"表达的类型是不明确的,没有更多的上下文"。我实际上只需要一个元素,我可以完全跳过数组创建吗? 我试图解决它,但我没有能够在没有编译器错误的情况下匹配该类型。是的,我搜索堆栈溢出但我还没能解决它。 谢谢你的帮助。

1 个答案:

答案 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()
    ]