/ / Comment définir UISearchBar dans l'application de cartes dans Swift? - ios, swift, cartes, mkmapview, barre de recherche

Comment définir UISearchBar dans l'application de cartes dans Swift? - ios, swift, cartes, mkmapview, barre de recherche

Je suis nouveau en utilisant swift et je veux faire une application qui utilise des cartes et je "essaie d'inclure une barre de recherche (UISearchBar) mais lorsque j'essaie de créer une fonction qui effectue la recherche, une erreur se produit sur une ligne. Voici le code:

func performSearch(){
matchingItems.removeAll()
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchText.text
request.region = mapView.region

let search = MKLocalSearch(request: request)
search.startWithCompletionHandler{
(response: MKLocalSearchResponse!, error: NSError!) in
for item in response.mapItems{
print("Item name = (item.name)")
print("Latitude = (item.placemark.location!.coordinate.latitude)")
print("Longitude = (item.placemark.location!.coordinate.longitude)")
}
}
}

Je reçois l'erreur dans le **startWithCompletionHandler** partie qui dit:

"Impossible de convertir la valeur de type" (MKLocalSearchResponse !, NSError!) -> () "au type d’argument attendu" MKLocalSearchCompletionHandler "".

Pouvez-vous me dire comment résoudre ce problème?

Réponses:

1 pour la réponse № 1

Si vous regardez la définition de MKLocalSearchCompletionHandler, vous pouvez voir que sa déclaration n’est pas exactement la même chose:

typealias MKLocalSearchCompletionHandler = (MKLocalSearchResponse?, NSError?) -> Void

Il suffit de remplacer votre code par:

func performSearch(){
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchText.text
request.region = mapView.region
let search = MKLocalSearch(request: request)
search.startWithCompletionHandler{
(response: MKLocalSearchResponse?, error: NSError?) in
if let items = response?.mapItems
{
for item in items{
print("Item name = (item.name)")
print("Latitude = (item.placemark.location!.coordinate.latitude)")
print("Longitude = (item.placemark.location!.coordinate.longitude)")
}
}
}
}

1 pour la réponse № 2

Les points d'exclamation sur votre code doivent être changés au lieu de cela:

(response: MKLocalSearchResponse!, error: NSError!) in

utilisez ceci:

(response: MKLocalSearchResponse?, error: NSError?) in

Liens utiles: MKLocalSearchCompletionHandler

J'espère que cela aide