簡體   English   中英

Google Places自動完成Swift 3

[英]Google Places Autocomplete Swift 3

我想將Google Places Autocomplete API集成到我的項目中,但無法通過文檔實現它,也無法獲得Swift-3的可靠參考。 誰能幫忙嗎? 謝謝。

細節

斯威夫特4,xCode 9

通常的http請求。 更多詳細信息: https : //developers.google.com/places/ios-api/autocomplete

完整樣本

PodFile

target 'stackoverflow-44996568' do
    use_frameworks!
    pod 'Alamofire'
    pod 'ObjectMapper'      
end

GoogleAutocompleteJSONModel

import ObjectMapper

class GoogleAutocompleteJSONModel: Mappable, CustomStringConvertible {

    public fileprivate(set) var placeId: String?
    public fileprivate(set) var reference: String?
    public fileprivate(set) var title: String?

    required convenience init?(map: Map) {
        self.init()
    }

    func mapping(map: Map) {

        title                       <- map["description"]
        placeId                     <- map["place_id"]
        reference                   <- map["reference"]
    }

    var description: String {
        return "\(toJSON())"
    }
}

網絡

import Alamofire
import ObjectMapper

class Network {

    class GoogleAPI {
        class Map {

            class var googleApiKey: String {
                return "YOUR_KEY"
            }

            class func autocomplete(request: String) {
                let url = "https://maps.googleapis.com/maps/api/place/autocomplete/json?input=\(request)&components=country:us&key=\(googleApiKey)"
                Alamofire.request(url)
                    .responseJSON { response in
                        if let json = response.result.value as? [String: Any] {
                            //print("JSON: \(json)")
                            let places = Array<GoogleAutocompleteJSONModel>(json: json["predictions"])
                            let autocomplete = places.flatMap{ $0.title}
                            print("!!!! \(autocomplete)")
                        }
                }
            }
        }
    }
}

擴展

import Foundation

extension Array where Element: Mappable {

    init(json: Any?) {
        self.init()

        var result = [Element]()
        if let array = json as? [[String: Any]] {
            for item in array {
                if let profile = Element(JSON: item) {
                    result.append(profile)
                }
            }
        }
        self = result
    }
}

視圖控制器

import UIKit

class ViewController: UIViewController {

    weak var searchBar: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let searchBar = UISearchBar(frame: CGRect(origin: CGPoint(x: 0, y: 20), size: CGSize(width: UIScreen.main.bounds.width, height: 40)))
        searchBar.delegate = self
        view.addSubview(searchBar)
        self.searchBar = searchBar
    }
}

extension ViewController: UISearchBarDelegate {
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        Network.GoogleAPI.Map.autocomplete(request: searchText)
    }
}

結果

在此處輸入圖片說明

您需要先通過Pod在項目中安裝Google Place SDK。 pod 'GooglePlacePicker'您可以使用此代碼通過pod安裝googlePlaces。

我還創建了一個簡單的庫,只是為了避免針對簡單請求的各種第三方庫和Google框架。

要發出諸如AutocompleteReverseGeoPlace info或Draw path之類的Google api請求,您只需使用以下步驟:

步驟1將GoogleApiHelper導入您的項目。

步驟2初始化GoogleApiHelper

GoogleApi.shared.initialiseWithKey("API_KEY")

步驟3調用方法

var input = GInput()
input.keyword = "San francisco"
GoogleApi.shared.callApi(input: input) { (response) in
    if let results = response.data as? [GApiResponse.Autocomplete], response.isValidFor(.autocomplete) {
        //Enjoy the Autocomplete Api
    } else { print(response.error ?? "ERROR") }
}

你可以在這里找到圖書館

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM