Apple Developer Documentation
- 애플 공식문서 해석.
- MapKit에는 지도 기반 주소와 장소들을 자연어 String으로 검색할 수 있는 기능이 있다.
- 사용자의 현재 위치 주변에 있는 장소부터 검색된다.
검색 자동완성 요청하기
- MKLocalSearchComplete 가 자동완성 제안을 제공한다.
- cof 를 입력하면 coffe까지 나온다.
UISearchResultUpdating 프로토콜을 사용해서 queryFragment를 받아온다.
func updateSearchResults(for searchController: UISearchController) {
// Ask `MKLocalSearchCompleter` for new completion suggestions based on the change in the text entered in `UISearchBar`.
searchCompleter?.queryFragment = searchController.searchBar.text ?? ""
}
- searchCompleter에 현재 텍스트를 업데이트해준다.
- 그러면 completer가 결과를 Delegate로 알려준다.
MKLocalSearchCompleterDelegate
- 검색 완성이 에러가 났을 때, 혹은 성공했을 때 두개의 Delegate가 필요하다.
- 검색 완성이 성공하면, 테이블 뷰에 저장하고 tableview를 리로드한다.
extension SuggestionsTableViewController: MKLocalSearchCompleterDelegate {
/// - Tag: QueryResults
func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
// As the user types, new completion suggestions are continuously returned to this method.
// Overwrite the existing results, and then refresh the UI with the new results.
completerResults = completer.results
tableView.reloadData()
}
func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
// Handle any errors returned from MKLocalSearchCompleter.
if let error = error as NSError? {
print("MKLocalSearchCompleter encountered an error: \\(error.localizedDescription). The query fragment is: \\"\\(completer.queryFragment)\\"")
}
}
}


검색 결과 하이라이트하기
- 검색 결과 객체의 타입은
MKLocalSearchCompletion 이다.