如何在 Swift 的地图应用程序中设置 UISearchBar?

How to set UISearchBar in maps application in Swift?

我是 swift 的新手,我想制作一个使用地图的应用程序,我正在尝试包含一个搜索栏(UISearchBar ) 但是当我尝试创建一个进行搜索的函数时,我在一行中遇到错误。这是代码:

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)")
      }
   }
}

我在 **startWithCompletionHandler** 部分收到错误消息:

"Cannot convert value of type '(MKLocalSearchResponse!, NSError!) -> ()' to expected argument type 'MKLocalSearchCompletionHandler'".

你能告诉我如何解决这个问题吗?

如果你看一下MKLocalSearchCompletionHandler的定义,你会发现它的声明并不完全一样:

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

只需将您的代码替换为:

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)")
            }
        }
    }
}

您代码上的感叹号需要更改 而不是这个:

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

使用这个:

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

有用的链接: MKLocalSearchCompletionHandler

希望对您有所帮助