簡體   English   中英

授權給HealthKit時錯誤'(_,_)-> Void'無法轉換為'HealthManager'

[英]error '(_, _) -> Void' is not convertible to 'HealthManager' when authorize to HealthKit

這是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)")
        }
      }
    }
  }

您正在對調用實例方法。 要調用實例方法,您必須先創建一個實例,例如

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

您還可以將方法設為方法:

class func authorizeHealthKit(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM