Экземпляр одноэлементного класса инициализируется только тогда, когда вы обращаетесь к свойству класса или вызываете метод класса.Первоначально свойство местоположения будет нулевым.Поэтому создайте такой метод запуска и вызовите метод в AppDelegate
. И не объявляйте свойство location в классе LocationManager как явно развернутое необязательное
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
LocationManager.shared.start()
print(LocationManager.shared.location?.coordinate.latitude)//will never crash
return true
}
LocationManager.swift
class LocationManager {
static let shared = LocationManager()
var location: CLLocation?
var manager = CLLocationManager()
private init() {
}
func start() {
manager.requestAlwaysAuthorization()
manager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
LocationManager.shared.location = locations.last
}
}