Значение типа 'UIViewController' не имеет члена 'mapView'; Вы имели в виду "loadView"?
Я пытаюсь найти места, используя MKLocalSearchRequest в Swift4 (для ios 12). Когда я добавляюlocationSearchTable.mapView = mapView
в конце viewDidLoad я получаю ошибку.
В ViewController
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
var resultSearchController: UISearchController? = nil
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
let locationSearchTable = storyboard!.instantiateViewController(withIdentifier: "LocationSearchTable")
resultSearchController = UISearchController(searchResultsController: locationSearchTable)
resultSearchController?.searchResultsUpdater = locationSearchTable as! UISearchResultsUpdating
let searchBar = resultSearchController!.searchBar
searchBar.sizeToFit()
searchBar.placeholder = "Search for places"
navigationItem.titleView = resultSearchController?.searchBar
resultSearchController?.hidesNavigationBarDuringPresentation = false
resultSearchController?.dimsBackgroundDuringPresentation = true
definesPresentationContext = true
locationSearchTable.mapView = mapView
}...
В таблице LocationSearchTable
import UIKit
import MapKit
class LocationSearchTable: UITableViewController {
var matchingItems: [MKMapItem] = []
var mapView: MKMapView? = nil
}
extension LocationSearchTable: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
guard let mapView = mapView,
let searchBarText = searchController.searchBar.text else { return }
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = searchBarText
request.region = mapView.region
let search = MKLocalSearch(request: request)
search.start { response, _ in
guard let response = response else {
return
}
self.matchingItems = response.mapItems
self.tableView.reloadData()
}
}
}...
1 ответ
Решение
Возможно locationSearchTable не LocationSearchTable
учебный класс.
Попробуйте следующий код
if let locationSearchTable = locationSearchTable as? LocationSearchTable {
locationSearchTable.mapView = mapView
}