Swift Academy · Leçon

Obtenir la position de l’utilisateur

Recevez les mises à jour de position avec CLLocationManager.

Leçon 2 sur 413 étapes

Obtenir la position de l’utilisateur est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Démarrer les mises à jour de localisation

Une fois l’autorisation obtenue, appelez startUpdatingLocation() pour commencer à recevoir un flux continu de positions. Le gestionnaire les transmet par l’intermédiaire du délégué. Appelez toujours stopUpdatingLocation() lorsque vous n’en avez plus besoin afin d’économiser la batterie.

manager.startUpdatingLocation()
// ... later
manager.stopUpdatingLocation()

Recevoir les positions dans le délégué

Les nouvelles positions arrivent dans locationManager(_:didUpdateLocations:). Le tableau est classé de la plus ancienne à la plus récente ; le dernier élément correspond donc à la position la plus récente.

func locationManager(_ m: CLLocationManager,
                     didUpdateLocations locations: [CLLocation]) {
    guard let latest = locations.last else { return }
    print(latest.coordinate.latitude, latest.coordinate.longitude)
}

L’objet CLLocation

Chaque position est un objet CLLocation qui contient bien plus que des coordonnées : coordinate, altitude, speed, course, timestamp et des valeurs de précision. Examinez ces données pour déterminer si une position est suffisamment fiable.

func describe(_ loc: CLLocation) {
    print("lat:", loc.coordinate.latitude)
    print("lon:", loc.coordinate.longitude)
    print("alt:", loc.altitude)
    print("when:", loc.timestamp)
}

Précision souhaitée

Définissez desiredAccuracy pour indiquer à Core Location la précision requise pour les positions. Une précision supérieure consomme davantage d’énergie. Les constantes comprennent kCLLocationAccuracyBest, kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracyHundredMeters et kCLLocationAccuracyKilometer.

manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

Filtre de distance

Utilisez distanceFilter pour ignorer les mises à jour tant que l’appareil n’a pas parcouru un nombre minimal de mètres. Cela réduit le bruit et économise de l’énergie pour les cas d’utilisation qui n’ont pas besoin de chaque infime déplacement.

manager.distanceFilter = 50 // meters

Évaluer la qualité d’une position

La propriété horizontalAccuracy correspond au rayon de confiance (en mètres). Une valeur négative signifie que la position n’est pas valide. Rejetez également les positions obsolètes en vérifiant l’ancienneté de leur timestamp.

func isUsable(_ loc: CLLocation) -> Bool {
    guard loc.horizontalAccuracy >= 0 else { return false }
    let age = -loc.timestamp.timeIntervalSinceNow
    return age < 15 && loc.horizontalAccuracy < 100
}

Demander une position unique

Si vous n’avez besoin que d’une seule position et non d’un flux, appelez requestLocation(). Le gestionnaire transmet une position au délégué, puis s’arrête automatiquement. Cette méthode consomme moins de batterie que le démarrage de mises à jour continues.

manager.requestLocation()

Gérer les erreurs de localisation

Les échecs arrivent dans locationManager(_:didFailWithError:). L’une des erreurs courantes est CLError.locationUnknown, qui est souvent temporaire : continuez d’attendre. CLError.denied signifie que l’autorisation a été retirée et que vous devez arrêter les mises à jour.

func locationManager(_ m: CLLocationManager,
                     didFailWithError error: Error) {
    if let clErr = error as? CLError, clErr.code == .denied {
        m.stopUpdatingLocation()
    }
}

Surveillance des changements importants

Pour un suivi approximatif et économe en énergie capable de réveiller votre application en arrière-plan, utilisez startMonitoringSignificantLocationChanges(). Cette méthode ne se déclenche qu’après un déplacement d’environ 500 mètres et convient parfaitement aux fonctionnalités tenant compte de la zone.

manager.startMonitoringSignificantLocationChanges()

Cap et trajectoire

Pour les fonctionnalités de boussole, startUpdatingHeading() fournit le cap magnétique ou réel via locationManager(_:didUpdateHeading:). Notez que CLLocation.course (la direction du déplacement) diffère du cap (l’orientation de l’appareil).

func locationManager(_ m: CLLocationManager,
                     didUpdateHeading newHeading: CLHeading) {
    print("Heading:", newHeading.trueHeading)
}

Calculer la distance entre des points

CLLocation peut mesurer la distance à vol d’oiseau jusqu’à une autre position avec distance(from:), en renvoyant une valeur en mètres. Cette possibilité est pratique pour la logique de proximité, sans aucune interface de carte.

let a = CLLocation(latitude: 41.0, longitude: 28.9)
let b = CLLocation(latitude: 41.1, longitude: 29.0)
let meters = a.distance(from: b)
print("Distance:", meters)

Vérification rapide : obtenir la localisation

Vérifiez votre compréhension de la réception des positions.

Récapitulatif : obtenir la localisation de l’utilisateur

Vous savez maintenant comment obtenir des coordonnées :

  • startUpdatingLocation() pour un flux, requestLocation() pour une position unique.
  • Lisez la position la plus récente avec locations.last dans le délégué.
  • Ajustez desiredAccuracy et distanceFilter pour trouver le bon compromis entre autonomie et précision.
  • Validez horizontalAccuracy et timestamp avant d’utiliser une position.
Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « Obtenir la position de l’utilisateur » est-elle gratuite ?

Oui — le texte complet de « Obtenir la position de l’utilisateur » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Obtenir la position de l’utilisateur » ?

Recevez les mises à jour de position avec CLLocationManager. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Obtenir la position de l’utilisateur » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Demander l’autorisation de localisation
  2. Obtenir la position de l’utilisateur
  3. Afficher des cartes dans SwiftUI
  4. Géocodage et régions
← Retour à Swift Academy