MKMapItem 数组中的双变量
Double variable in MKMapItem array
我得到了一个 SearchBar,它给出了它打印在 TableView 中搜索的名称的名称。在添加搜索到的键之前,我正在检查我的数据库是否获得了变量。如果我的数据库得到它,我将搜索到的词添加到 TableView 中。我的问题是,目前 matchingItems 或 response.mapItems 有双变量或更多,并且它在 TableView 中打印了很多次相同的名称。我已经尝试了很多时间来解决这个问题,但我不知道该怎么做。
错误图片 > http://i67.tinypic.com/2jfyxdf.png
MKMapItem 示例
<MKMapItem: 0x6000003566e0> {
isCurrentLocation = 0;
name = "Arco di Traiano";
placemark = "Arco di Traiano, Via Traiano, 82100 Benevento, Italia @ <+41.13253257,+14.77915406> +/- 0.00m, region CLCircularRegion (identifier:'<+41.13253316,+14.77915406> radius 1414.16', center:<+41.13253316,+14.77915406>, radius:1414.16m)";
timeZone = "Europe/Rome (CEST) offset 7200 (Daylight)";
url = "http://www.comune.benevento.it/bn2_pagine/_mediagallery/pid.php?id=11";
}
代码如下:
var matchingItems: [MKMapItem] = []
extension LocationSearchTable : UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text == nil || (searchController.searchBar.text?.count)! < 1 {
self.matchingItems.removeAll()
self.tableView.reloadData()
}
guard let mapView = mapView,
let searchBarText = searchController.searchBar.text else { return }
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchBarText
request.region = mapView.region
let search = MKLocalSearch(request: request)
search.start { response, _ in
guard let response = response else {
return
}
for (index , name) in response.mapItems.enumerated() {
if (checkIfDatabaseGotThis(key: String(name.name!)) != nil){
self.matchingItems.append(response.mapItems[index])
self.tableView.reloadData()
}
}
}
}
}
已更新,因此示例按名称进行重复数据删除:
var seenNames = Set<String>()
for (index , name) in response.mapItems.enumerated() {
let item = response.mapItems[index]
if(checkIfDatabaseGotThis(key: String(name.name!)) != nil && !seenNames.contains(item.name)){
self.matchingItems.append(item)
seenNames.insert(item.name)
self.tableView.reloadData()
}
}
这应该会根据名称从项目列表中删除所有重复项。它会跟踪您看到的所有现有名称。如果以前没有见过该名称,则将该项目添加到列表中。否则忽略。
我得到了一个 SearchBar,它给出了它打印在 TableView 中搜索的名称的名称。在添加搜索到的键之前,我正在检查我的数据库是否获得了变量。如果我的数据库得到它,我将搜索到的词添加到 TableView 中。我的问题是,目前 matchingItems 或 response.mapItems 有双变量或更多,并且它在 TableView 中打印了很多次相同的名称。我已经尝试了很多时间来解决这个问题,但我不知道该怎么做。
错误图片 > http://i67.tinypic.com/2jfyxdf.png MKMapItem 示例
<MKMapItem: 0x6000003566e0> {
isCurrentLocation = 0;
name = "Arco di Traiano";
placemark = "Arco di Traiano, Via Traiano, 82100 Benevento, Italia @ <+41.13253257,+14.77915406> +/- 0.00m, region CLCircularRegion (identifier:'<+41.13253316,+14.77915406> radius 1414.16', center:<+41.13253316,+14.77915406>, radius:1414.16m)";
timeZone = "Europe/Rome (CEST) offset 7200 (Daylight)";
url = "http://www.comune.benevento.it/bn2_pagine/_mediagallery/pid.php?id=11";
}
代码如下:
var matchingItems: [MKMapItem] = []
extension LocationSearchTable : UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text == nil || (searchController.searchBar.text?.count)! < 1 {
self.matchingItems.removeAll()
self.tableView.reloadData()
}
guard let mapView = mapView,
let searchBarText = searchController.searchBar.text else { return }
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchBarText
request.region = mapView.region
let search = MKLocalSearch(request: request)
search.start { response, _ in
guard let response = response else {
return
}
for (index , name) in response.mapItems.enumerated() {
if (checkIfDatabaseGotThis(key: String(name.name!)) != nil){
self.matchingItems.append(response.mapItems[index])
self.tableView.reloadData()
}
}
}
}
}
已更新,因此示例按名称进行重复数据删除:
var seenNames = Set<String>()
for (index , name) in response.mapItems.enumerated() {
let item = response.mapItems[index]
if(checkIfDatabaseGotThis(key: String(name.name!)) != nil && !seenNames.contains(item.name)){
self.matchingItems.append(item)
seenNames.insert(item.name)
self.tableView.reloadData()
}
}
这应该会根据名称从项目列表中删除所有重复项。它会跟踪您看到的所有现有名称。如果以前没有见过该名称,则将该项目添加到列表中。否则忽略。