2016-05-11 8 views
0

ここにHealthManagerクラスとそれに関数authorizeHealthKitがあります。そのすべてはHealthManager.swiftファイルにあります。Error '(_、_) - > Void'はHealthKitに承認されたときに 'HealthManager'に変換できません

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

インスタンスではなくクラス自体に関数を呼び出していません。その結果、 'class func authorizeHealthKit()'であってはなりませんか? –

答えて

1

あなたはクラスインスタンスメソッドを呼び出しています。インスタンスメソッドを呼び出すには、まずインスタンスを作成する必要があります。

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

あなたもこの方法クラスメソッド作ることができます:

class func authorizeHealthKit(...) 
+0

ありがとう!) – i33r55a99

関連する問題