0Pricing
Swift Academy · Aula

Obtenção da Localização do Usuário

Receba atualizações de localização com CLLocationManager.

Obtenção da Localização do Usuário é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

Iniciando as atualizações de localização

Depois de obter a autorização, chame startUpdatingLocation() para começar a receber um fluxo contínuo de localizações. O gerenciador as entrega por meio do delegado. Sempre chame stopUpdatingLocation() quando não precisar mais delas para economizar bateria.

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

Recebendo localizações no delegado

Novas localizações chegam em locationManager(_:didUpdateLocations:). A matriz é ordenada da mais antiga para a mais recente, portanto, o último elemento é a localização mais recente.

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

O objeto CLLocation

Cada localização é um CLLocation que contém muito mais do que coordenadas: coordinate, altitude, speed, course, timestamp e valores de precisão. Analise esses dados para decidir se uma localização é suficientemente boa.

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

Precisão desejada

Defina desiredAccuracy para informar ao Core Location de que nível de precisão você precisa. Uma precisão maior consome mais energia. As constantes incluem kCLLocationAccuracyBest, kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracyHundredMeters e kCLLocationAccuracyKilometer.

manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

Filtro de distância

Use distanceFilter para suprimir atualizações até que o dispositivo tenha se movido uma quantidade mínima de metros. Isso reduz o ruído e economiza energia em casos de uso que não precisam registrar cada pequeno movimento.

manager.distanceFilter = 50 // meters

Avaliando a qualidade da localização

A propriedade horizontalAccuracy é o raio (em metros) de confiança. Um valor negativo significa que a localização é inválida. Rejeite também localizações antigas verificando há quanto tempo o timestamp foi registrado.

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

Solicitando uma localização única

Se você precisar apenas de uma localização única (e não de um fluxo), chame requestLocation(). O gerenciador entrega uma localização ao delegado e depois para automaticamente. Isso consome menos bateria do que iniciar atualizações contínuas.

manager.requestLocation()

Lidando com erros de localização

As falhas chegam em locationManager(_:didFailWithError:). Uma ocorrência comum é CLError.locationUnknown, que geralmente é temporária — continue aguardando. CLError.denied significa que a permissão foi revogada e você deve parar.

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

Monitoramento de alterações significativas

Para um rastreamento aproximado e de baixo consumo de energia, capaz de reativar seu app em segundo plano, use startMonitoringSignificantLocationChanges(). Ele só é acionado depois que o dispositivo se move aproximadamente 500 metros e é ideal para recursos cientes da região.

manager.startMonitoringSignificantLocationChanges()

Direção e curso

Para recursos de bússola, startUpdatingHeading() entrega a direção magnética ou verdadeira por meio de locationManager(_:didUpdateHeading:). Observe que CLLocation.course (a direção do deslocamento) é diferente da direção (a orientação do dispositivo).

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

Calculando a distância entre pontos

CLLocation pode medir a distância em linha reta até outra localização com distance(from:), retornando o valor em metros. Isso é útil para lógica de proximidade sem qualquer interface de 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)

Verificação rápida: obtendo a localização

Verifique sua compreensão sobre o recebimento de localizações.

Recapitulação: obtendo a localização do usuário

Agora você sabe como obter coordenadas:

  • startUpdatingLocation() para um fluxo e requestLocation() para uma única localização.
  • Leia a localização mais recente de locations.last no delegado.
  • Ajuste desiredAccuracy e distanceFilter para equilibrar consumo de energia e precisão.
  • Valide horizontalAccuracy e timestamp antes de usar uma localização.

Perguntas Frequentes

A aula “Obtenção da Localização do Usuário” é grátis?

Sim — o texto completo de “Obtenção da Localização do Usuário” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “Obtenção da Localização do Usuário”?

Receba atualizações de localização com CLLocationManager. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Obtenção da Localização do Usuário”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Solicitação de Autorização de Localização
  2. Obtenção da Localização do Usuário
  3. Exibição de Mapas no SwiftUI
  4. Geocodificação e Regiões
← Voltar para Swift Academy