2016-04-21 2 views
0

Я пытаюсь запросить авторизацию для использования данных приложения Health.Получение типа выражения неоднозначно без дополнительного контекста

Я получаю следующее сообщение об ошибке:

FirstViewController.swift:44:9: Expression type '(typesToShare: _, readTypes: Set<HKSampleType>?, completion: (_, _) -> Void)' (aka '(typesToShare: _, readTypes: Optional<Set<HKSampleType>>, completion: (_, _) ->())') is ambiguous without more context 

в 44: 9, где typesToShare: ноль

let healthStore: HKHealthStore? = { 
     if HKHealthStore.isHealthDataAvailable() { 
      return HKHealthStore() 
     } else { 
      return nil 
     } 
    }() 

    let dateOfBirthCharacteristic = HKCharacteristicType.characteristicTypeForIdentifier(
     HKCharacteristicTypeIdentifierDateOfBirth) 

    let biologicalSexCharacteristic = HKCharacteristicType.characteristicTypeForIdentifier(
     HKCharacteristicTypeIdentifierBiologicalSex) 

    let bloodTypeCharacteristic = HKCharacteristicType.characteristicTypeForIdentifier(
     HKCharacteristicTypeIdentifierBloodType) 

    let dataTypesToRead: Set<HKSampleType>? = NSSet(objects: 
     dateOfBirthCharacteristic!, biologicalSexCharacteristic!, bloodTypeCharacteristic!) as? Set<HKSampleType> 

    let dataTypesToShare: Set<HKSampleType>? = NSSet() as? Set<HKSampleType> 

    // Making the request 
    let healthData = healthStore?.requestAuthorizationToShareTypes 
    (typesToShare: nil, 
    readTypes: dataTypesToRead, 
    completion: { (success, error) -> Void in 
              if success { 
               println("success") 
              } else { 
               println(error.description) 
              } 
    }) 

Я новичок прошивку и не использовал HealthKit раньше. Как я могу это исправить?

ответ

0

Я также новичок в healthKit, но попробуйте использовать dataTypesToShare Variable в месте nil в typeToShare argument.and лучше создать dataTypesToShare так же, как и с dataTypesToRead. И эта функция ничего не возвращает. Вы можете попытаться использовать блокировки, чтобы получить успех блока завершения .

 func authorizeHealthKit(completion: ((success:Bool, error:NSError!) -> Void)!) 
{ 
healthStore?.requestAuthorizationToShareTypes 
    (typesToShare: nil, 
    readTypes: dataTypesToRead, 
    completion: { (success, error) -> Void in 
              if success { 
               println("success") 
              } else { 
              println(error.description) 
             } 
}) 
} 
+0

вы можете, чем вызвать эту функцию, как, authorizeHealthKit {(успеха: тип, ошибка: типа) в печати ("успех")} –

+0

Спасибо за ответ Sourav! Я пробовал использовать nil и создавать типыToShare так же, как typesToRead, но я получаю ту же ошибку. –

+0

Попробуйте закрыть, что бы определенно работать, функция не имеет типа возврата u не может использовать let healthdata, таким образом. –