2016-09-23 8 views
1

Ich versuche, die Genehmigung für eine Kategorie in healthkit zu beantragen, indem Code verwendet:Argumenttyp ‚[HKCategoryType?]‘ Entspricht nicht erwarteten Typ ‚Hashable‘

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

von https://www.raywenderlich.com/86336/ios-8-healthkit-swift-getting-started.

Doch wenn ich so tue ich:

Argumenttyp '[? HKCategoryType]' entspricht nicht erwarteten Typ 'Hashable'

Wie kann ich eine Kategorie in Healthkit sparen und gibt es im Allgemeinen ein Tutorial, das HKCategoryType und möglicherweise auch HKCategoryTypeIdentifierMindfulSession gewidmet ist?

Antwort

5

Der verknüpfte Artikel ist kein gutes Beispiel für das Erstellen eines Sets aus ArrayLiteral.

Sie müssen Set<HKSampleType> an requestAuthorization(toShare:read:) übergeben (die Methode wurde in Swift 3 umbenannt), und Swift ist nicht gut darin, Sammlungsarten zu ermitteln.

Also, erklären Sie besser jeden Typ von healthKitTypesToWrite und healthKitTypesToRead.

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

mit einem ArrayLiteral bis zu einem gewissen Set Art zu geben, versucht Swift die ArrayLiteral zu Set, rief Set.init(arrayLiteral:) intern zu konvertieren. Normalerweise müssen Sie Set.init(arrayLiteral:) nicht direkt verwenden.

Verwandte Themen