Swift MapKit 自动完成
Posted
技术标签:
【中文标题】Swift MapKit 自动完成【英文标题】:Swift MapKit Autocomplete 【发布时间】:2016-12-14 06:28:53 【问题描述】:我正在尝试在我的视图控制器中设置地址自动完成功能,这样用户就不必输入整个地址,而是从搜索文本字段下方选择它。这是我的控制器的样子:
import Foundation
import UIKit
import MapKit
extension AddNewAddressViewController: MKLocalSearchCompleterDelegate
func completerDidUpdateResults(_ completer: MKLocalSearchCompleter)
searchResults = completer.results
searchResultsTableView.reloadData()
func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error)
// handle error
class AddNewAddressViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
var searchCompleter = MKLocalSearchCompleter()
var searchResults = [MKLocalSearchCompletion]()
override func viewDidLoad()
searchCompleter.delegate = self
searchCompleter.queryFragment = addressSearch.text!
searchResultsTableView.dataSource = self
super.viewDidLoad()
@IBOutlet weak var addressSearch: UITextField!
@IBOutlet weak var searchResultsTableView: UITableView!
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
let searchResultsCount = searchResults.count
return searchResultsCount
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let searchResult = searchResults[indexPath.row]
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: nil)
cell.textLabel?.text = searchResult.title
cell.detailTextLabel?.text = searchResult.subtitle
return cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
@IBAction func defaultAddressButton(_ sender: Any)
@IBAction func addAddressButton(_ sender: Any)
我收到一条错误消息:
类型 AddNewAddressViewController 不符合协议 'UITableViewDataSource'
我错过了什么?
提前致谢。
【问题讨论】:
【参考方案1】:您省略了 cellForRowAtIndexPath 声明的第一个参数的下划线,这在 swift 3.0 下是必需的:
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
[etc.]
因此,您没有与预期签名匹配的所需函数。
【讨论】:
以上是关于Swift MapKit 自动完成的主要内容,如果未能解决你的问题,请参考以下文章