我正在关注这篇文章: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)
我正在研究类似的问题。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)
我真的不喜欢这个解决方案,但它现在对我有用。
| 归档时间: |
|
| 查看次数: |
1350 次 |
| 最近记录: |