gpt4 book ai didi

ios - 使用 MKLocalSearchCompleter 搜索地名(城市/城镇)

转载 作者:行者123 更新时间:2023-12-02 04:46:37 25 4
gpt4 key购买 nike

我正在尝试构建一个仅需要显示城市/城镇名称的自动完成文本字段。

所以我想做的是,当有人进入时

它将显示

Amsterdam
Amstelveen

所以它只会显示实际的城市名称,除此之外什么也不显示。它不需要考虑地方社区等。

我已经应用了过滤器,但这并不能解决问题。

lazy var searchCompleter: MKLocalSearchCompleter = {
let sC = MKLocalSearchCompleter()
sC.delegate = self
sC.filterType = .locationsOnly
return sC
}()

func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
self.searchSource = completer.results.map { $0.title }
DispatchQueue.main.async {
for result in self.searchSource! {
print(result)
}
}
}

func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
print(error.localizedDescription)
}

有人知道是否可以实现我想要的吗?

最佳答案

我一直在寻找一种方法在我的一个应用程序中执行此操作,但 MKLocalSearchCompletion 似乎不是执行此操作的理想工具。使用 Google map API 或仅使用本地城市名称数据库可能会更简单。

iOS native 框架中的另一个选项是利用相关的 MKLocalSearchRequest 并提取“位置”字段,该字段最接近对应于城市/城镇。这篇文章提供了有关沿着这条路线走的更多信息:

How to extract country and city from MKLocalSearchCompletion?

话虽如此,我确实使用 MKLocalSearchCompletion 取得了一些进展,通过解析返回结果中的标题属性来检查“逗号”字符。逗号的存在表示第一个逗号之前的整个字符串是城镇、城市或州。下面的简单示例采用文本字段输入并仅在表格 View 中返回过滤后的结果。

我必须指出,它似乎适用于美国的城市,因为 MKLocalSearchCompletion 数据库对于该地区来说似乎更加完整。一些国际城市没有显示,因为结果不遵循此方法使用的相同“逗号”格式。

import UIKit
import MapKit

class ViewController: UIViewController, MKLocalSearchCompleterDelegate, UITableViewDelegate, UITableViewDataSource {

var completer = MKLocalSearchCompleter()

var completionResults: [MKLocalSearchCompletion] = []

var cityResults: [String] = [] {
didSet {
citySearchTable.reloadData()
}
}

@IBOutlet weak var citySearchTable: UITableView!

@IBAction func cityTextChanged(_ sender: UITextField) {
completer.queryFragment = sender.text!
}

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.

let coordUSA = CLLocationCoordinate2DMake(39.999733,-98.678503);

completer.region = MKCoordinateRegion(center: coordUSA, latitudinalMeters: 1, longitudinalMeters: 1)

completer.delegate = self
citySearchTable.delegate = self
citySearchTable.dataSource = self
}

func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
completionResults = completer.results
completionResults = completionResults.filter({ (result) -> Bool in
return result.title != ""
})
if completionResults.count > 0 {
var newResults: [String] = []
for result in completionResults {
if result.title.contains(",") {
let splitByComma = result.title.components(separatedBy: ",")
if splitByComma.count > 0 {
if !newResults.contains(splitByComma[0]) {
newResults.append(splitByComma[0])
}
}
}
}
if newResults.count > 0 {
cityResults = newResults
}
}
}

func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
//
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cityResults.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = citySearchTable.dequeueReusableCell(withIdentifier: "cell")!
cell.textLabel?.text = cityResults[indexPath.row]
cell.textLabel?.adjustsFontSizeToFitWidth = true
return cell
}

}

我知道这篇文章已经有几年了,但它确实出现在我最近的研究中,并且与我当前的工作相关,所以我想我应该发布我的想法。

关于ios - 使用 MKLocalSearchCompleter 搜索地名(城市/城镇),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43492961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com