你好,我在使用 XCode 15 时遇到了问题。这是我这部分的完整代码:
struct ExploreView: View {
@State private var cameraPosition: MapCameraPosition = .region(.userRegion)
@State private var searchText = ""
@State private var results = [MKMapItem]()
@State private var mapSelection: MKMapItem?
@State private var showDetails = false
@State private var getDirections = false
@State var region = MKCoordinateRegion(
center: .init(latitude: 37.334_900,longitude: -122.009_020),
span: .init(latitudeDelta: 0.2, longitudeDelta: 0.2)
)
let locationManager = CLLocationManager()
var body: some View {
NavigationView {
VStack {
Map(coordinateRegion: $region, showsUserLocation: true, userTrackingMode: .constant(.follow))
.edgesIgnoringSafeArea(.all)
.onAppear {
locationManager.requestWhenInUseAuthorization()
}
ForEach(results, id: \.self) { item in
let placemark = item.placemark
Marker(placemark.name ?? "", coordinate: placemark.coordinate)
}
}
.overlay(alignment: .bottom) {
TextField("Suche beispielsweise nach \"Kebab\"", text: $searchText)
.cornerRadius(12)
.font(.subheadline)
.padding(12)
.background(.thinMaterial)
.padding()
.shadow(radius: 10)
}
.onSubmit(of: .text) {
Task { await searchPlaces() }
}
.onChange(of: mapSelection, { oldValue, newValue in
showDetails = newValue != nil
})
.sheet(isPresented: $showDetails, content: {
LocationDeatilsView(mapSelection: $mapSelection, show: $showDetails, getDirections: $getDirections)
.presentationDetents([.height(340)])
.presentationBackgroundInteraction(.enabled(upThrough: .height(340)))
.presentationCornerRadius(12)
})
.mapControls {
MapCompass()
MapPitchToggle()
MapUserLocationButton()
}
}
.onAppear() {
Task { await searchKebab() }
}
.navigationBarTitle("Ort des Dönermannes", displayMode: .inline)
}
}
ForEach 循环 (ForEach(results, id: .self) { item in...) 会导致问题。通过删除循环的最后一行(Marker(...)),代码可以完美运行。如果您需要知道这一点,我有一些视图扩展:
extension ExploreView {
func searchPlaces() async {
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = searchText
request.region = .userRegion
let results = try? await MKLocalSearch(request: request).start()
self.results = results?.mapItems ?? []
}
func searchKebab() async {
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = "Kebab"
request.region = .userRegion
searchText = "Kebab"
let results = try? await MKLocalSearch(request: request).start()
self.results = results?.mapItems ?? []
}
}
extension CLLocationCoordinate2D {
static var userLocation: CLLocationCoordinate2D {
return .init(latitude: 53.62029035596979, longitude: 9.862939156850185)
}
}
extension MKCoordinateRegion {
static var userRegion: MKCoordinateRegion {
return .init(center: .userLocation,
latitudinalMeters: 10000,
longitudinalMeters: 10000)
}
}
我在“var body: some View{...}”行中收到消息当然我已经检查了其他帖子并用谷歌搜索了它...但没有任何作用:/ 非常感谢! :)
尝试类似的事情
if let name = item.placemark.name, let coordinate = item.placemark.coordinate {
Marker(name, coordinate: coordinate)
}
如果名称或坐标为
else
,您可能需要添加具有备用视图的
nil