Я работал и выключался в Swift на протяжении многих лет, поэтому, извините, если я делаю что-то глупое, пользовательский интерфейс Swift также не помогает моему замешательству. У меня есть код, с которым я работаю, внизу.
Итак, я делаю приложение Geofencing, используя SwiftUI, у меня есть основы и все работает, но я все еще имею немного до go ,
У меня есть координаты геозон и прочее внутри переменной среды UserData, которую я получаю json в другом месте.
Есть SwiftUI объект, который имеет карту с текущей позицией и инициализирует CLLocationManager для работы с геозоной.
Я пытаюсь реализовать делегат в том же файле с помощью
locationManager.delegate = self
в setupManager (),
, но это вызовет
Cannot assign value of type 'GeofencingView' to type 'CLLocationManagerDelegate?'
Отсутствие информации SwiftUI, определяющей c информацию в Интернете, кажется, вызывает наибольшую путаницу для меня на В данный момент я думаю, что я должен сделать следующее:
- создать настроенный NsObject, который обрабатывает делегаты, но в этом случае я не уверен, как передать @ EnviromentObject
- Найти как разместить делегатов на UIViewRep resentable object.
Буду признателен за любые указания на то, что я делаю неправильно.
import SwiftUI
import MapKit
import CoreLocation
struct GeofencingView: UIViewRepresentable {
@EnvironmentObject var userData: UserData
var notification = LocalNotificationManager()
var locationManager = CLLocationManager()
func setupManager() {
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.requestAlwaysAuthorization()
self.startGoefenceMonitoring()
}
func startGoefenceMonitoring() {
print("MapListView::startGeofenceMonitoring")
for landmark in self.userData.landmarks {
let moniteringCordinate = CLLocationCoordinate2DMake(landmark.locationCoordinate.longitude, landmark.locationCoordinate.latitude)
let moniteringRegion = CLCircularRegion.init(center: moniteringCordinate, radius: 20.0, identifier: "\(landmark.id)" )
locationManager.startMonitoring(for: moniteringRegion)
}
}
func makeUIView(context: Context) -> MKMapView {
setupManager()
let mapView = MKMapView(frame: UIScreen.main.bounds)
let count = self.userData.landmarks.count
var annotationArray: [MKAnnotation] = []
var num:Int = 0
mapView.showsUserLocation = true
mapView.userTrackingMode = .follow
return mapView
}
func updateUIView(_ uiView: MKMapView, context: Context) {
}
}
struct GeofencingView_Preview: PreviewProvider {
static var previews: some View {
GeofencingView()
.environmentObject(UserData())
}
}