Передача переменных в класс LocationManagerDelegate - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь передать имя String в мой класс LocationManagerDelegate, чтобы он загружал обновленное местоположение в Firebase, но я получаю сообщение об ошибке «Аргумент передан для вызова без аргументов». Я довольно новичок в Swift, поэтому не уверен, как правильно это сделать.

struct ListView : View {
    var name = ""
    var geopoints : [String : GeoPoint]

    @State var managerDelegate = LocationManagerDelegate(name: name)
    @State var manager = CLLocationManager()

    var body : some View {
        VStack {
            Text(name)
        }.onAppear{
            self.manager.delegate = self.managerDelegate
            self.manager.requestAlwaysAuthorization()
        }

    }
}

class LocationManagerDelegate : NSObject, CLLocationManagerDelegate{
    var name = ""

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        if status == .denied{
            print("denied")
        }
        else{
            print("authorized")
            manager.requestLocation()
        }
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error.localizedDescription)
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let last = locations.last
        let db = Firestore.firestore()

        db.collection("locations").document("sharing").setData(["updates" : [name : GeoPoint(latitude: (last?.coordinate.latitude)!, longitude: (last?.coordinate.longitude)!)]], merge: true) {
            (err) in

            if err != nil {
                print((err?.localizedDescription)!)
                return
            }
            print("success")
        }
    }
}

1 Ответ

0 голосов
/ 29 марта 2020

Вам необходимо добавить явный инициализатор, как показано ниже

class LocationManagerDelegate : NSObject, CLLocationManagerDelegate {
    var name = ""

    init(name: String) {    // << this one !!
       self.name = name
    }

    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...