问题描述
我正在尝试使用SwiftUI的新Map组件。到目前为止,还算不错,但是现在,我正在努力在API响应后更新地图上的MapPins。 (以便通过地图移动来更新图钉)。 我已经使用TinyNetworking进行了网络通话,并且通话正常,但是MapPins没有更新,我也不明白为什么。
这是一些代码:
网络通话:
@Observedobject var places = Resource(endpoint: getPlaces())
地图声明:
var locations: [Location]
Map(coordinateRegion: $viewmodel.region,interactionModes: .all,showsUserLocation: true,userTrackingMode: $trackingMode,annotationItems: locations) { location -> MapPin in
MapPin(coordinate: location.coordinate,tint: .red)
}
放置结构:
struct Place: Codable {
let title: String
let coordinates: Coordinates
}
位置结构:
struct Location: Identifiable {
let id = UUID()
let title: String
let coordinate: CLLocationCoordinate2D
}
这是我尝试建立连接的地方:
MapView(followUser: $followUser,locations: convertPlacesToLocation(newPlaces: places))
private func convertPlacesToLocation(newPlaces: Resource<[Place]>) -> [Location] {
var locations: [Location] = []
if let values = newPlaces.value {
for place in values {
locations.append(Location(title: place.title,coordinate: .init(latitude: place.coordinates.lat,longitude: place.coordinates.lon)))
}
}
return locations
}
convertPlacesToLocation
确实被调用了两次:第一次加载地图时,在网络调用返回之前,以及在调用返回之后,值是正确的。
但是MapPin没有更新...
有什么想法吗?
以下是进行网络呼叫和重新加载地点的代码:
final class Resource<A>: ObservableObject {
let endpoint: Endpoint<A>
@Published var value: A?
init(endpoint: Endpoint<A>) {
self.endpoint = endpoint
reload()
}
func reload() {
URLSession.shared.load(endpoint) { result in
dispatchQueue.main.async {
self.value = try? result.get()
}
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)