授权给 HealthKit 时,错误 '(_, _) -> Void' 不能转换为 'HealthManager'

Posted

技术标签:

【中文标题】授权给 HealthKit 时,错误 \'(_, _) -> Void\' 不能转换为 \'HealthManager\'【英文标题】:error '(_, _) -> Void' is not convertible to 'HealthManager' when authorize to HealthKit授权给 HealthKit 时,错误 '(_, _) -> Void' 不能转换为 'HealthManager' 【发布时间】:2016-05-11 16:51:18 【问题描述】:

这里是 HealthManager 类和一个函数 authorizeHealthKit 。所有这些都在 HealthManager.swift 文件中。

class HealthManager 
  func authorizeHealthKit(completion: ((success:Bool, error:NSError!) -> Void)!)
  
    // 1. Set the types you want to read from HK Store
    let healthKitTypesToRead : Set = [
      HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!,
      HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBloodType)!,
      HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)!,
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!,
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!,
      HKObjectType.workoutType()
    ]

// 2. Set the types you want to write to HK Store
let healthKitTypesToWrite : Set = [
  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex)!,
  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!,
  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!,
  HKQuantityType.workoutType()
]

// 3. If the store is not available (for instance, iPad) return an error and don't go on.
if !HKHealthStore.isHealthDataAvailable()

  let error = NSError(domain: "Ira.HKTutorial", code: 2, userInfo: [NSLocalizedDescriptionKey:"HealthKit is not available in this Device"])
  if( completion != nil )
  
    completion(success:false, error:error)
  
  return;


    // 4.  Request HealthKit authorization
    healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite, readTypes: healthKitTypesToRead)  (success, error) -> Void in

      if( completion != nil )
      
        completion(success:success,error:error)
      
    
  

问题是当我试图在 ViewController.swift 中调用 authorizeHealthKit() 方法时:

  func authorizeHealthKit()
  
    HealthManager.authorizeHealthKit (authorized, error) -> Void in//here is an error '(_, _) -> Void' is not convertible to 'HealthManager'
      if authorized 
        println("HealthKit authorization received.")
      
      else
      
        println("HealthKit authorization denied!")
        if error != nil 
          println("\(error)")
        
      
    
  

【问题讨论】:

您不是在实例上调用该函数,而是在类本身上调用该函数。因此,不应该是class func authorizeHealthKit()吗? 【参考方案1】:

您正在对 调用 instance 方法。要调用实例方法,必须先创建实例,例如

let manager = HealthManager()
manager.authorizeHealthKit  ... 

你也可以将方法设为class方法:

class func authorizeHealthKit(...)

【讨论】:

以上是关于授权给 HealthKit 时,错误 '(_, _) -> Void' 不能转换为 'HealthManager'的主要内容,如果未能解决你的问题,请参考以下文章

HealthKit 请求授权失败

HealthKit 请求授权失败

HealthKit iTunes Connect 授权错误

Apple Health Kit 错误域 = com.apple.healthkit 代码 = 5“未确定授权”

HealthKit requestAuthorization 返回代码 100:“授权会话超时”

HealthKit requestAuthorization 返回代码 100:“授权会话超时”