title: Filter google places API search results iOS swift
body: <p>I'm looking to filter my near by location searches to restaurants only in the google places API in swift I found tags on googles website <a href="https://developers.google.com/places/supported_types" rel="nofollow noreferrer">https://developers.google.com/places/supported_types</a> but I don't know how to implement these tags any help would be appreciated.</p>
  
  <pre><code>import UIKit
  import GooglePlaces
  
  class PlacesViewController: UIViewController {
  
  @IBOutlet weak var tableView: UITableView!
  
  // An array to hold the list of possible locations.
  var likelyPlaces: [GMSPlace] = []
  var selectedPlace: GMSPlace?
  
  // Cell reuse id (cells that scroll out of view can be reused).
  let cellReuseIdentifier = "cell"
  
  override func viewDidLoad() {
  super.viewDidLoad()
  
  // Register the table view cell class and its reuse id.
  tableView.register(UITableViewCell.self, forCellReuseIdentifier: 
  cellReuseIdentifier)
  
  // This view controller provides delegate methods and row data for the 
  table view.
  tableView.delegate = self
  tableView.dataSource = self
  
  tableView.reloadData()
  }
  
  // Pass the selected place to the new view controller.
  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  if segue.identifier == "unwindToMain" {
    if let nextViewController = segue.destination as? MapViewController {
      nextViewController.selectedPlace = selectedPlace
    }
   }
   }
   }
  
  // Respond when a user selects a place.
  extension PlacesViewController: UITableViewDelegate {
  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: 
  IndexPath) {
  selectedPlace = likelyPlaces[indexPath.row]
  performSegue(withIdentifier: "unwindToMain", sender: self)
  }
  }
  
  // Populate the table with the list of most likely places.
  extension PlacesViewController: UITableViewDataSource {
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: 
  Int) -&gt; Int {
  return likelyPlaces.count
  }
  
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
  IndexPath) -&gt; UITableViewCell {
  let cell = tableView.dequeueReusableCell(withIdentifier: 
  cellReuseIdentifier, for: indexPath)
  let collectionItem = likelyPlaces[indexPath.row]
  
  cell.textLabel?.text = collectionItem.name
  
  return cell
  }
  
  // Adjust cell height to only show the first five items in the table
  // (scrolling is disabled in IB).
  func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
  IndexPath) -&gt; CGFloat {
  return self.tableView.frame.size.height/5
  }
  
   // Make table rows display at proper height if there are less than 5 
   items.
   func tableView(_ tableView: UITableView, heightForFooterInSection 
  section: Int) -&gt; CGFloat {
  if (section == tableView.numberOfSections - 1) {
    return 1
  }
  return 0
  }
  }
  </code></pre>
  
  <p>my other view controller </p>
  
  <pre><code>import UIKit
  import GoogleMaps
  import GooglePlaces
  
  class MapViewController: UIViewController {
  
    var locationManager = CLLocationManager()
    var currentLocation: CLLocation?
    var mapView: GMSMapView!
    var placesClient: GMSPlacesClient!
    var zoomLevel: Float = 15.0
  
    // An array to hold the list of likely places.
    var likelyPlaces: [GMSPlace] = []
  
    // The currently selected place.
    var selectedPlace: GMSPlace?
  
    // A default location to use when location permission is not granted.
    let defaultLocation = CLLocation(latitude: -33.869405, longitude: 
    151.199)
  
    // Update the map once the user has made their selection.
    @IBAction func unwindToMain(segue: UIStoryboardSegue) {
      // Clear the map.
      mapView.clear()
  
      // Add a marker to the map.
      if selectedPlace != nil {
        let marker = GMSMarker(position: 
    (self.selectedPlace?.coordinate)!)
        marker.title = selectedPlace?.name
        marker.snippet = selectedPlace?.formattedAddress
        marker.map = mapView
      }
  
      listLikelyPlaces()
    }
  
    override func viewDidLoad() {
      super.viewDidLoad()
  
      // Initialize the location manager.
      locationManager = CLLocationManager()
      locationManager.desiredAccuracy = kCLLocationAccuracyBest
      locationManager.requestAlwaysAuthorization()
      locationManager.distanceFilter = 50
      locationManager.startUpdatingLocation()
      locationManager.delegate = self
  
      placesClient = GMSPlacesClient.shared()
  
      // Create a map.
      let camera = GMSCameraPosition.camera(withLatitude: defaultLocation.coordinate.latitude,
                                            longitude: defaultLocation.coordinate.longitude,
                                            zoom: zoomLevel)
      mapView = GMSMapView.map(withFrame: view.bounds, camera: camera)
      mapView.settings.myLocationButton = true
      mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
      mapView.isMyLocationEnabled = true
  
      // Add the map to the view, hide it until we've got a location update.
      view.addSubview(mapView)
      mapView.isHidden = true
  
      listLikelyPlaces()
    }
  
    // Populate the array with the list of likely places.
    func listLikelyPlaces() {
      // Clean up from previous sessions.
      likelyPlaces.removeAll()
  
      placesClient.currentPlace(callback: { (placeLikelihoods, error) -&gt; Void in
        if let error = error {
          // TODO: Handle the error.
          print("Current Place error: \(error.localizedDescription)")
          return
        }
  
        // Get likely places and add to the list.
        if let likelihoodList = placeLikelihoods {
          for likelihood in likelihoodList.likelihoods {
            let place = likelihood.place
            self.likelyPlaces.append(place)
          }
        }
      })
    }
  
    // Prepare the segue.
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      if segue.identifier == "segueToSelect" {
        if let nextViewController = segue.destination as? PlacesViewController {
          nextViewController.likelyPlaces = likelyPlaces
        }
      }
    }
  }
  
  // Delegates to handle events for the location manager.
  extension MapViewController: CLLocationManagerDelegate {
  
    // Handle incoming location events.
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
      let location: CLLocation = locations.last!
      print("Location: \(location)")
  
      let camera = GMSCameraPosition.camera(withLatitude: location.coordinate.latitude,
                                            longitude: location.coordinate.longitude,
                                            zoom: zoomLevel)
  
      if mapView.isHidden {
        mapView.isHidden = false
        mapView.camera = camera
      } else {
        mapView.animate(to: camera)
      }
  
      listLikelyPlaces()
    }
  
    /k/ Handle authorization for the location manager.
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
      switch status {
      case .restricted:
        print("Location access was restricted.")
      case .denied:
        print("User denied access to location.")
        // Display the map using the default location.
        mapView.isHidden = false
      case .notDetermined:
        print("Location status not determined.")
      case .authorizedAlways: fallthrough
      case .authorizedWhenInUse:
        print("Location status is OK.")
      }
    }
  
    // Handle location manager errors.
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
      locationManager.stopUpdatingLocation()
      print("Error: \(error)")
    }
      }
  </code></pre>