J'ai mis à jour Swift 2 et Xcode 7 et exécuté l'outil de migration. Ensuite, j'ai eu une tonne d'erreurs. Je suis coincé sur celui-ci
func authorizeHealthKit(completion: ((success:Bool, error:NSError?) throws -> Void)?)
{
// 1. Set the types you want to read from HK Store
let healthKitTypesToRead = (array:[
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
])
// 2. Set the types you want to write to HK Store
let healthKitTypesToWrite = (array:[
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
])
// 3. If the store is not available (for instance, iPad) return an error and don't go on.
if !HKHealthStore.isHealthDataAvailable()
{
var error = NSError.self
if( completion != nil )
{
completion(success:false, error:&error)
}
return;
}
// 4. Request HealthKit authorization
healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite as Set<NSObject>, readTypes: healthKitTypesToRead as Set<NSObject>) { (success, error) -> Void in
if( completion != nil )
{
completion(success:success,error:error)
}
}
}
L'erreur est en cours d'exécution (succès: faux, erreur et erreur)
Des pensées?
Vous appelez la fermeture comme suit:
if completion != nil {
completion(success: false, error: error)
}
La completion
étant optionnelle, vous l'appelleriez ainsi:
completion?(success: false, error: error)
Notez le ?
. Cela élimine également le besoin de if completion != nil ...
.
-
Je remarque que vous avez défini la fermeture de manière à générer des erreurs. Si c'est vraiment le cas, vous avez besoin de quelque chose comme un bloc do
-try
-catch
:
do {
try completion?(success:false, error: error)
} catch let completionError {
print(completionError)
}
Soit ça, soit changer la fermeture pour éviter les erreurs. C'est un motif assez curieux.
-
Vous avez également une ligne qui dit
var error = NSError.self
Je ne sais pas quelle est votre intention. Quelle erreur essayez-vous de transmettre à la fermeture?
Si vous voulez vraiment créer votre propre objet NSError
, vous pouvez faire quelque chose comme:
let error = NSError(domain: "com.domain.app", code: 1, userInfo: [NSLocalizedDescriptionKey : NSLocalizedString("Health Data Not Available", comment: "")])
Je recevais un message d'erreur très similaire pour une raison complètement différente.
Impossible d'appeler la valeur de type non-fonction CLLocationCoordinate2D?
J'ai écrit mon code en tant que tel:
secondCoord(latitude: secondLongLat.0, longitude: secondLongLat.1)
Ce qui était idiot. Il me manquait le constructeur lui-même. La version correcte est ci-dessous.
secondCoord = CLLocationCoordinate2D(latitude: secondLongLat.0, longitude: secondLongLat.1)