2016-09-23 5 views
1

私は、コードを使用することによりhealthkitにカテゴリーの許可を要求しようとしています:https://www.raywenderlich.com/86336/ios-8-healthkit-swift-getting-startedから引数の型「[HKCategoryTypeは?]」期待タイプに準拠しない「ハッシュ可能」

let healthKitStore: HKHealthStore = HKHealthStore() 
let healthKitTypesToWrite = Set(arrayLiteral:[ 
    HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifierMindfulSession) 
    ]) 
healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite, readTypes: healthKitTypesToRead) { (success, error) -> Void in 

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

私がそうするときしかし、私が取得:

引数の型「[?HKCategoryType]は」期待タイプ に準拠していない私はHealthkitでカテゴリを保存するにはどうすればよい「ハッシュ可能」

HKCategoryTypeとHKCategoryTypeIdentifierMindfulSession専用のチュートリアルがありますか?

答えて

5

リンクされた記事は、ArrayLiteralからSetを作成する良い例ではありません。

Set<HKSampleType>requestAuthorization(toShare:read:)に渡す必要があります(このメソッドはSwift 3で名前が変更されました)。Swiftはコレクションタイプを推論するのには適していません。

したがって、それぞれのタイプをhealthKitTypesToWritehealthKitTypesToReadと明示的に宣言することをお勧めします。いくつかのSet型に配列リテラルを与えると

let healthKitTypesToWrite: Set<HKSampleType> = [ 
    HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.mindfulSession)! 
] 
let healthKitTypesToRead: Set<HKObjectType> = [ 
    //... 
] 
healthKitStore.requestAuthorization(toShare: healthKitTypesToWrite, read: healthKitTypesToRead) { (success, error) -> Void in 

    completion?(success, error) 
} 

、スウィフトは内部Set.init(arrayLiteral:)を呼び出し、Setに配列リテラルを変換しようとします。通常は直接Set.init(arrayLiteral:)を使用する必要はありません。

関連する問題