代码之家  ›  专栏  ›  技术社区  ›  HyunJin

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

  •  1
  • HyunJin  · 技术社区  · 8 年前

    我刚开始使用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** 部分说明:

    “无法转换类型为”(MKLocalSearchResponse!,NSError!)的值-> ()”应为参数类型“MKLocalSearchCompletionHandler”。

    你能告诉我怎么修吗?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Michaël Azevedo Lauriane    8 年前

    如果你看看 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)")
                }
            }
        }
    }
    
        2
  •  1
  •   Andre Breton    7 年前

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

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

    使用此:

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

    有用的链接: MKLocalSearchCompletionHandler

    希望有帮助