对于视障人士的应用程序,我想在视图中显示POI。我使用下面的代码。尽管最低级别(requestNearbyLocations
)将信息打印到调试屏幕,但我无法将此数据(locdata
)返回到调用方法,也无法返回到视图。
所用代码的主要摘录:
struct ContentView: View {
var Apple: AppleData = AppleData()
var body: some View {
Text(Apple.text)
.onAppear {
Apple.requestLoc()
}
}
}
带
class AppleData {
var text = ""
func requestLoc() -> Void {
Task {
async let mytext = requestNearbyLocations()
text = await mytext
}
}
func requestNearbyLocations() async -> String {
var region = MKCoordinateRegion()
region.center = CLLocationCoordinate2D(latitude: 52.060049, longitude: 4.542196)
var loctext = ""
let request = MKLocalPointsOfInterestRequest(center: region.center, radius: 100.0)
request.pointOfInterestFilter = MKPointOfInterestFilter(excluding: [.restaurant, .cafe])
let search = MKLocalSearch(request: request)
do {
let response = try await search.start()
print(response.mapItems)
for item in response.mapItems {
print( item.name! )
loctext = item.name!
}
}
catch {
print(error)
}
return loctext
}
}
我错过了什么?
您想要"观察"AppleData
,它应该"发布"text
中的更改。
因此,声明AppleData
为ObservableObject
,text
为@Published
:
class AppleData: ObservableObject {
@Published var text = ""
...
}
并且ContentView
应该将该对象指定为@ObservedObject
:
struct ContentView: View {
@ObservedObject var apple = AppleData()
var body: some View {
Text(apple.text)
.onAppear {
apple.requestLoc()
}
}
}
请参阅管理应用程序中的模型数据。