Swift:无法生成表达式的诊断;请提交错误报告

问题描述 投票:0回答:1

你好,我在使用 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{...}”行中收到消息当然我已经检查了其他帖子并用谷歌搜索了它...但没有任何作用:/ 非常感谢! :)

swift mapkit xcode15 ios17
1个回答
0
投票

尝试类似的事情

if let name = item.placemark.name, let coordinate = item.placemark.coordinate {

    Marker(name, coordinate: coordinate)

 } 

如果名称或坐标为

else
,您可能需要添加具有备用视图的 
nil

© www.soinside.com 2019 - 2024. All rights reserved.