【发布时间】:2021-08-08 19:18:17
【问题描述】:
我正在构建一个 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属性