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

问题描述:

我是新的使用swift,我想做一个应用程序使用地图,我试图包括一个搜索栏(UISearchBar)但当我尝试使一个函数,使搜索我得到一个错误线。下面的代码:如何在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'“。

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

如果你看看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)") 
      } 
     } 
    } 
} 
+0

错误消失了!非常感谢! :) – HyunJin

+0

为什么如果它解决了您的问题,将其取消标记为正确? –

的惊叹号您代码需要更改 而不是此:

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

us E本:

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

相关链接: MKLocalSearchCompletionHandler

希望它可以帮助