如何解决SwiftUI:如何在API调用后移动MapPin?
我正在尝试使用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 举报,一经查实,本站将立刻删除。