MKLocalSearch 如何避免出现副标题为“搜索附近”的结果?

use*_*934 5 ios swift

我正在关注这篇文章:https://www.peteralt.com/blog/mapkit-location-search-with-swiftui/

我设置了一个 LocationSearchService,如下所示:

extension LocationSearchService: MKLocalSearchCompleterDelegate {
    func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
        self.searchResults = completer.results
        self.status = completer.results.isEmpty ? .noResults : .result
    }

    func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
        self.status = .error(error.localizedDescription)
    }
}

class LocationSearchService: NSObject, ObservableObject {

    enum LocationStatus: Equatable {
        case idle
        case noResults
        case isSearching
        case error(String)
        case result
    }

    @Published var queryFragment: String = ""
    @Published private(set) var status: LocationStatus = .idle
    @Published private(set) var searchResults: [MKLocalSearchCompletion] = []

    private var queryCancellable: AnyCancellable?
    private let searchCompleter: MKLocalSearchCompleter!

    init(searchCompleter: MKLocalSearchCompleter = MKLocalSearchCompleter()) {
        self.searchCompleter = searchCompleter
        super.init()
        self.searchCompleter.delegate = self

        queryCancellable = $queryFragment
            .receive(on: DispatchQueue.main)
            .debounce(for: .milliseconds(250), scheduler: RunLoop.main, options: nil)
            .sink(receiveValue: { fragment in
                self.status = .isSearching
                if !fragment.isEmpty {
                    self.searchCompleter.queryFragment = fragment
                } else {
                    self.status = .idle
                    self.searchResults = []
                }
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到了这样的值,其中包含“搜索附近”。我该如何过滤掉这个?

在此输入图像描述

Den*_*nis 11

我遇到了同样的问题。

在设置 MKLocalSearchCompleter 时,我可以通过以下方式指定只需要地址和兴趣点来修复此问题。

searchCompleter.resultTypes = MKLocalSearchCompleter.ResultType([.address, .pointOfInterest])
Run Code Online (Sandbox Code Playgroud)


Joh*_*mis 0

我正在研究类似的问题。MKLocalSearchCompleter 类包含一个属性resultTypes,根据文档,该属性允许您选择:

  • 询问
  • 兴趣点
  • 地址

因此,您似乎想要设置完成程序以排除结果类型“查询”,例如:

completer.resultTypes = [.address, .pointOfInterest]** 这不是工作代码

然而,我发现没有有用的方法来使用这个属性。我的解决方案是使用字符串过滤器来删除包含字符串“搜索附近”的结果:

- (void)completerDidUpdateResults:(MKLocalSearchCompleter *)completer {
    
    NSMutableArray *suggestions = [[NSMutableArray alloc] init];
    NSArray* results = completer.results;
    
    for (MKLocalSearchCompletion *place in results)
    {
        if ([@"Search Nearby" isEqualToString:place.subtitle]) {
            continue;
        }
        [suggestions addObject:place];
    }
    ... // do something with suggestions
}
Run Code Online (Sandbox Code Playgroud)

或在斯威夫特:

var suggestions : [MKLocalSearchCompletion] = []
for place in results {
    if place.subtitle == "Search Nearby" { continue }
    resultsToReturn.add(place)
} 
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢这个解决方案,但它现在对我有用。