2
任何人都可以在使用Google Places时帮助如何解决Swift3中的这个警告吗?Google Places API Warning
“API API警告:在使用前没有在GMSAutocompleteResultsViewController实例上设置代理请注意,这可能导致未定义的行为,例如无法关闭屏幕,未被通知选择,以及无法正确管理对象生命周期“。
我基本上遵循https://developers.google.com/places/ios-api/autocomplete教程[搜索栏添加到视图顶部]
代码:
import UIKit[enter image description here][1]
import GooglePlaces
class LocationTabViewController: UIViewController {
var resultsViewController: GMSAutocompleteResultsViewController?
var searchController: UISearchController?
var resultView: UITextView?
override func viewDidLoad() {
super.viewDidLoad()
resultsViewController = GMSAutocompleteResultsViewController()
resultsViewController?.delegate = self as? GMSAutocompleteResultsViewControllerDelegate
searchController = UISearchController(searchResultsController: resultsViewController)
searchController?.searchResultsUpdater = resultsViewController
let subView = UIView(frame: CGRect(x: 0, y: 65.0, width: 350.0, height: 45.0))
subView.addSubview((searchController?.searchBar)!)
view.addSubview(subView)
searchController?.searchBar.sizeToFit()
searchController?.hidesNavigationBarDuringPresentation = false
// When UISearchController presents the results view, present it in
// this view controller, not one further up the chain.
definesPresentationContext = true
}
}
// Handle the user's selection.
extension ViewController: GMSAutocompleteResultsViewControllerDelegate {
func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
didAutocompleteWith place: GMSPlace) {
// Do something with the selected place.
print("Place name: \(place.name)")
print("Place address: \(String(describing: place.formattedAddress))")
print("Place attributions: \(String(describing: place.attributions))")
}
func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
didFailAutocompleteWithError error: Error){
// TODO: handle the error.
print("Error: ", error.localizedDescription)
}
// Turn the network activity indicator on and off again.
func didRequestAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}
func didUpdateAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
}
有一个错误说:不能指定类型''LocationTabViewController'的值来键入“GMSAutocompleteResultsViewControllerDelegate?”并修复它说:“插入为! GMSAutocompleteResultsViewControllerDelegate“。 – Rocky
@Rocky我相信你必须在这种情况下使用bang运算符'resultsViewController?.delegate = self as!GMSAutocompleteResultsViewControllerDelegate',这样你就不会返回一个可选的。更多关于类型casting [here](https:// www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0ahUKEwiSt97bzvTWAhVLwFQKHS_aDRIQFgg6MAM&url=https%3A%2F%2Fdeveloper.apple.com%2Flibrary%2Fcontent%2Fdocumentation%2FSwift%2FConceptual% 2FSwift_Programming_Language%2FTypeCasting.html&USG = AOvVaw2PrYfF_q4lKcQlBeymrY1K) –