我正在 SwiftUI 中渲染 Map,在出现时更新来自 api 响应的注释,并且我在视图更新期间获得 Modifying 状态,这将导致未定义的行为。
下面是代码
class ViewModel: ObservableObject {
@Published var results = [Destination]()
func getData() {
// APi call
self.results = response
}
}
struct SampleView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
if #available(iOS 14.0, *) {
VStack(spacing: -5) {
Map(coordinateRegion: $region, showsUserLocation: true, annotationItems: viewModel.categorySearchResults) { dest in
MapMarker(coordinate: dest.coordinate)
}
}.background(Color.clear)
.onAppear(perform: {
DispatchQueue.main.async {
setRegion(viewModel.getLatLong()!)
viewModel.getData()
}
})
} else {
}
}
private func setRegion(_ coordinate: CLLocationCoordinate2D) {
region = MKCoordinateRegion(
center: coordinate,
span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
)
}
}
答案 0 :(得分:-1)
我看到这个问题是因为地图正在更新 State 变量区域以及结果的 @Published 属性,所以它触发了警告。
用 .constant(region) 替换 $region 只需使用以下代码即可解决问题
但是如果你更新区域值,它不会更新地图 或者您可以将 viewModel.categorySearchResults 作为上一个屏幕的依赖项发送,这样您就不需要在 onAppear 方法中调用 viewModel.getData()
Map(coordinateRegion: .constant(region), showsUserLocation: true, annotationItems: viewModel.categorySearchResults) { dest in
MapMarker(coordinate: dest.coordinate)
}