Google Places Api iOS Tutorial Using Swift 4



import UIKit
import AFNetworking
import CoreLocation
class searchScr: UIViewController,UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource {
     @IBOutlet weak var searchTxt: UITextField!
    @IBOutlet weak var searchView: UIView!
    @IBOutlet weak var searchIMG: UIImageView!
    
    private var responseData:NSMutableData?
    private var dataTask:URLSessionDataTask?
    
    private let googleMapsKey = "AIzaSyDg2tlPcoqxx2Q2rfjhsAKS-9j0n3JA_a4"
    private let baseURLString = "https://maps.googleapis.com/maps/api/place/autocomplete/json"

    @IBOutlet weak var searchTBL: UITableView!
    
    
    var searchArray = [AnyObject]()
    var placeName = [String]()
    var urlString = String()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.searchTBL.delegate = self
        self.searchTBL.dataSource = self
        
    }
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print("did");
        searchView.backgroundColor = UIColor.white
        searchIMG.image = UIImage(named: "SEARCH1")
    }
    
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let currentText = textField.text ?? ""
        guard let stringRange = Range(range, in: currentText) else { return false }
        var updatedText = currentText.replacingCharacters(in: stringRange, with: string)
        updatedText = updatedText.replacingOccurrences(of: "[\\[\\]^+<>|]-=$#@", with: "%20", options: .regularExpression, range: nil)
        
        if updatedText.count==0 {
            searchTxt.text = ""
        }
      
        self.placeName.removeAll()
        self.searchArray.removeAll()
        self.searchTBL.reloadData()
        urlString = "\(baseURLString)?key=\(googleMapsKey)&input=\(updatedText)"
        
        print("url== ",urlString)
        googleAutoAPI()
        
        return true;
    }
        func googleAutoAPI(){
            
            //AIzaSyDg2tlPcoqxx2Q2rfjhsAKS-9j0n3JA_a4
            let newStr = urlString .replacingOccurrences(of: " ", with: "%20", options: .literal, range: nil)

            
            print("newStr== ",newStr)
        
            let manager = AFHTTPRequestOperationManager()
       
        manager.post(newStr,
            parameters:nil,
            success: {
                (operation: AFHTTPRequestOperation!,responseObject: Any!) in
               print((responseObject as AnyObject).description)
                let status = (responseObject as! [String : AnyObject])["status"]
                if(status!.isEqual("OK")){
                    self.searchArray = (responseObject as! [String : AnyObject])["predictions"] as! [AnyObject]
                    for placeDIc in self.searchArray{
                        if let cityDict = placeDIc as? NSDictionary {
                            if let cityplaces = cityDict.value(forKey: "description") {
                                self.placeName.append(cityplaces as! String)
                            }
                        }
                    }
                    self.searchTBL.reloadData()
  //                  print("hello==",self.placeName)
                }else{
                    self.placeName.removeAll()
                    self.searchArray.removeAll()
                    self.searchTBL.reloadData()
                }
        },
            failure: { (operation: AFHTTPRequestOperation?, error: Any?) in
                print(error as Any)
                self.alertMethod(Title: "Alert", Message: "Internet Connection Error..!")
        }
        )
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.searchArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
        let nameLbl = cell.viewWithTag(100) as? UILabel
        nameLbl?.text = self.placeName[indexPath.row]
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 49
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        addressString = self.placeName[indexPath.row]
        print("addressString== ",addressString)
        isSaved = true;
        let story: UIStoryboard? = storyboard
        let view: UIViewController? = story?.instantiateViewController(withIdentifier: "homeScr")
        self.view.window?.rootViewController = view
    }
    
    @IBAction func homeAction(_ sender: Any) {
        let story: UIStoryboard? = storyboard
        let view: UIViewController? = story?.instantiateViewController(withIdentifier: "homeScr")
        self.view.window?.rootViewController = view
    }
    @IBAction func cameraAction(_ sender: Any) {
//        let story: UIStoryboard? = storyboard
//        let view: UIViewController? = story?.instantiateViewController(withIdentifier: "homeScr")
//        self.view.window?.rootViewController = view
    }
    @IBAction func notiActionPressed(_ sender: Any) {
        let story: UIStoryboard? = storyboard
        let view: UIViewController? = story?.instantiateViewController(withIdentifier: "inBoxScr")
        self.view.window?.rootViewController = view
    }
    @IBAction func profileActionPrssed(_ sender: Any) {
        let story: UIStoryboard? = storyboard
        let view: UIViewController? = story?.instantiateViewController(withIdentifier: "profileScr")
        self.view.window?.rootViewController = view
    }

}


Please check the screenshot




Comments