2016-01-04 2 views
0

Я хочу получить Swift и HealthKit. Я следую this tutorial, но у меня возникают проблемы при запросе разрешений HealthKit. Я искал проблему, и это распространено при переходе на Swift 2, но я только смутно понимаю вопрос. Вот код:Swift and HealthKit: тип выражения слишком двусмысленный без дополнительного контекста

let healthKitTypesToRead = Set(arrayLiteral:[ 
    HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth), 
    HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBloodType), 
    HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex), 
    HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass), 
    HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight), 
    HKObjectType.workoutType() 
    ]) 

И ошибка я получаю «Тип выражения неоднозначное без больше контекста». Мне нужен только один элемент, могу ли я вообще пропустить создание массива? Я попытался обойти это, но я не могу соответствовать типу без ошибок компилятора. И да, я искал переполнение стека, но я не смог его решить. Спасибо за помощь.

ответ

3

Компилятор не может вывести тип из 3 разных типов, которые вы передаете в литерал HKCharacteristicType?, HKQuantityType? и HKWorkoutType. Вам нужно установить тип набора в HKObjectType и явно развернуть дополнительные опции, если они гарантированно возвратят значения, отличные от нуля. Если значения не гарантированы, то лучше всего проверить каждый из них на nil перед добавлением в набор.

let healthKitTypesToRead: Set<HKObjectType> = [ 
    HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!, 
    HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBloodType)!, 
    HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)!, 
    HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!, 
    HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!, 
    HKObjectType.workoutType() 
    ] 
Смежные вопросы