Я нахожусь в процессе создания приложения SwiftUI, но я застрял с начальным значением, которое я передаю переменной для запуска, и что оно не обновляется при загрузке представления.
Я пытался найти некоторые ответы, но ничего не помогло для моего кода.
Я пытаюсь сделать следующее
- У меня есть набор данных с местоположениями
- Я хочу создать подмножество этих местоположений
- Я хочу загрузить первое местоположение из вновь созданного подмножества
Что я спотыкаюсь, так это то, что когда я загружаю карту в первый раз, она по-прежнему поддерживает данные инициализации, а не данные из подмножества
Любая помощь приветствуется, Дэниел
import SwiftUI
import CoreData
import MapKit
struct MainInterface: View {
@Environment(\.presentationMode) var presentationMode
var initialPoint: Places = totalData[1]
init() {
let subset1 = Array(Set(totalData.filter({
$0.Area == 1
})))
.prefix(3)
let subset2 = Array(Set(totalData.filter({
$0.Area == 2
})))
.prefix(3)
levelSet = Array(subset1) + Array(subset2)
self.initialPoint = levelSet[0]
}
var body: some View {
VStack(spacing: 0) {
SubView(initialPoint: $initialPoint)
}
.onAppear{
//levelSet = Array(level1set) + Array(level2set)
//self.initialPoint = levelSet[0]
}
}
}
import SwiftUI
import MapKit
struct SubView: UIViewRepresentable {
@Binding var initialPoint: Place
let mapView = MKMapView()
func makeUIView(context: Context) -> MKMapView {
mapView.delegate = context.coordinator
return mapView
}
func updateUIView(_ view: MKMapView, context: Context) {
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, MKMapViewDelegate, UIGestureRecognizerDelegate {
var parent: SubView
init(_ parent: SubView) {
self.parent = parent
super.init()
self.parent.mapView.setRegion(MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: self.parent.initialPoint.Latitude, longitude: self.parent.initialPoint.Longitude), span: MKCoordinateSpan(latitudeDelta: 10, longitudeDelta: 10)), animated: true)
}
}
func mapViewDidChangeVisibleRegion(_ mapView: MKMapView) {
parent.region = mapView.region
parent.centerCoordinate = mapView.centerCoordinate
}
}
Вам рекомендуется поместить материал из метода
init
в модель представления и использовать шаблон observable. В противном случаеinitialPoint
должно быть свойством@State
.