2016-05-11 3 views
0

Hier ist HealthManager-Klasse und eine Funktion authorizeHealthKit drin. All das befindet sich in der Datei HealthManager.swift.Fehler '(_, _) -> Void' kann nicht in 'HealthManager' konvertiert werden, wenn die Berechtigung für HealthKit

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) 
     } 
    } 
    } 
} 

Das Problem ist, wenn ich versuche, die Methode authorizeHealthKit() in ViewController.swift aufzurufen:

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)") 
     } 
     } 
    } 
    } 
+0

Sie die Funktion auf einer Instanz nicht anrufen, sondern auf die Klasse selbst. Folglich sollte es nicht "class func authorizeHealthKit()" sein? –

Antwort

1

Sie ein auf einemKlasse Instanz Methode aufrufen. Um eine Instanzmethode aufzurufen, müssen Sie zuerst eine Instanz erstellen, z.

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

Sie könnten auch die Methode eine Klasse Methode machen:

class func authorizeHealthKit(...) 
+0

vielen Dank!) – i33r55a99

Verwandte Themen