0Pricing
Swift Academy · Lección

Obtener la ubicación del usuario

Reciba actualizaciones de ubicación con CLLocationManager.

Obtener la ubicación del usuario es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Iniciar las actualizaciones de ubicación

Una vez concedida la autorización, llame a startUpdatingLocation() para empezar a recibir un flujo continuo de lecturas. El administrador las entrega mediante el delegado. Llame siempre a stopUpdatingLocation() cuando ya no las necesite para ahorrar batería.

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

Recibir ubicaciones en el delegado

Las nuevas lecturas llegan a locationManager(_:didUpdateLocations:). La matriz está ordenada de la más antigua a la más reciente, por lo que el último elemento es la ubicación más reciente.

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

El objeto CLLocation

Cada lectura es un CLLocation que contiene mucho más que coordenadas: coordinate, altitude, speed, course, timestamp y valores de precisión. Inspecciónelos para decidir si una lectura es suficientemente buena.

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

Precisión deseada

Establezca desiredAccuracy para indicar a Core Location qué precisión necesita para las lecturas. Una mayor precisión consume más energía. Entre las constantes se incluyen kCLLocationAccuracyBest, kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracyHundredMeters y kCLLocationAccuracyKilometer.

manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

Filtro de distancia

Use distanceFilter para suprimir las actualizaciones hasta que el dispositivo se haya desplazado un número mínimo de metros. Esto reduce el ruido y ahorra energía en los casos de uso que no necesitan registrar cada pequeño movimiento.

manager.distanceFilter = 50 // meters

Evaluar la calidad de una lectura

La propiedad horizontalAccuracy indica el radio de confianza, en metros. Un valor negativo significa que la lectura no es válida. Rechace también las lecturas obsoletas comprobando cuánto tiempo hace que se obtuvo timestamp.

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

Solicitar una ubicación puntual

Si solo necesita una lectura (no un flujo continuo), llame a requestLocation(). El administrador entrega una ubicación al delegado y después se detiene automáticamente. Consume menos batería que iniciar actualizaciones continuas.

manager.requestLocation()

Gestionar errores de ubicación

Los errores se reciben en locationManager(_:didFailWithError:). Uno habitual es CLError.locationUnknown, que suele ser transitorio; siga esperando. CLError.denied significa que se revocó la autorización y debe detenerse.

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

Supervisión de cambios significativos

Para realizar un seguimiento aproximado de bajo consumo que pueda activar su app en segundo plano, use startMonitoringSignificantLocationChanges(). Solo se activa después de que el dispositivo se desplace aproximadamente 500 metros y es ideal para funciones basadas en regiones.

manager.startMonitoringSignificantLocationChanges()

Orientación y rumbo

Para las funciones de brújula, startUpdatingHeading() entrega el rumbo magnético o verdadero mediante locationManager(_:didUpdateHeading:). Tenga en cuenta que CLLocation.course (la dirección del desplazamiento) difiere del rumbo (la orientación del dispositivo).

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

Calcular la distancia entre puntos

CLLocation puede medir la distancia en línea recta hasta otra ubicación mediante distance(from:), que devuelve el resultado en metros. Esto resulta útil para la lógica de proximidad sin necesidad de mostrar un mapa.

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)

Comprobación rápida: obtener la ubicación

Compruebe su comprensión de la recepción de lecturas.

Resumen: obtener la ubicación del usuario

Ahora sabe cómo obtener coordenadas:

  • startUpdatingLocation() para un flujo continuo y requestLocation() para una sola lectura.
  • Lea la lectura más reciente de locations.last en el delegado.
  • Ajuste desiredAccuracy y distanceFilter para equilibrar consumo y precisión.
  • Valide horizontalAccuracy y timestamp antes de usar una lectura.

Preguntas frecuentes

¿La lección «Obtener la ubicación del usuario» es gratis?

Sí — el texto completo de «Obtener la ubicación del usuario» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Obtener la ubicación del usuario»?

Reciba actualizaciones de ubicación con CLLocationManager. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Obtener la ubicación del usuario»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Solicitar autorización de ubicación
  2. Obtener la ubicación del usuario
  3. Mostrar mapas en SwiftUI
  4. Geocodificación y regiones
← Volver a Swift Academy