最小的例子:
import SwiftUI
import MapKit
extension CLLocationCoordinate2D: Equatable {
static public func ==(lhs: Self, rhs: Self) -> Bool {
true
}
}
struct ContentView: View {
@State var region: MKCoordinateRegion
var body: some View {
Map(coordinateRegion: $region)
}
}
在设备上运行此程序时,地图有时会冻结,并且在控制台中记录“在视图更新期间修改状态,这将导致未定义的行为”。我可以通过放大到大约 0.001 的 latitudeDelta 并在不抬起手指的情况下用两根手指缓慢平移和缩放来始终如一地造成这种情况。为什么会这样?当我不 extend CLLocationCoordinate2D
,或者当 equals 方法返回lhs.latitude == rhs.latitude && lhs.longitude == rhs.longitude
or evenfalse
时,没有错误并且地图不会冻结。
这是一个示例初始区域:
ContentView(region: MKCoordinateRegion(center: .init(latitude: 40.7128, longitude: -74.0060), span: .init(latitudeDelta: 0.001, longitudeDelta: 0.001)))
我正在使用 Xcode 12.2 和 iOS 14.2。