swiftui - 带有 SwiftUI 的 Google 地方自动完成 API

标签 swiftui googleplacesautocomplete

我正在尝试使用 SwiftUI 在我的应用程序中实现自动搜索地址。谷歌教程基于 UIKit,我希望如果有人尝试过并且可以指导我走向正确的方向。谢谢

最佳答案

试试这个代码;这个对我有用。

import Foundation
import UIKit
import SwiftUI
import GooglePlaces


struct PlacePicker: UIViewControllerRepresentable {

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    @Environment(\.presentationMode) var presentationMode
    @Binding var address: String

    func makeUIViewController(context: UIViewControllerRepresentableContext<PlacePicker>) -> GMSAutocompleteViewController {

        let autocompleteController = GMSAutocompleteViewController()
        autocompleteController.delegate = context.coordinator


        let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
          UInt(GMSPlaceField.placeID.rawValue))!
        autocompleteController.placeFields = fields

        let filter = GMSAutocompleteFilter()
        filter.type = .address
        filter.country = "ZA"
        autocompleteController.autocompleteFilter = filter
        return autocompleteController
    }

    func updateUIViewController(_ uiViewController: GMSAutocompleteViewController, context: UIViewControllerRepresentableContext<PlacePicker>) {
    }

    class Coordinator: NSObject, UINavigationControllerDelegate, GMSAutocompleteViewControllerDelegate {

        var parent: PlacePicker

        init(_ parent: PlacePicker) {
            self.parent = parent
        }

        func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
            DispatchQueue.main.async {
                print(place.description.description as Any)
                self.parent.address =  place.name!
                self.parent.presentationMode.wrappedValue.dismiss()
            }
        }

        func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
            print("Error: ", error.localizedDescription)
        }

        func wasCancelled(_ viewController: GMSAutocompleteViewController) {
            parent.presentationMode.wrappedValue.dismiss()
        }

    }
}

关于swiftui - 带有 SwiftUI 的 Google 地方自动完成 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58503371/

相关文章:

swift - 如何更改 .sheet 修饰符的过渡?

swift - 如何使用 UINavigationController 的 searchController 属性将 UISearchController 合并到 SwiftUI NavigationView 中?

android - 发布 Google Places 自动完成响应 - 现在声明为内部

java - 如何以编程方式实现谷歌地点自动完成

google-maps - 我可以通过谷歌地点自动完成获取坐标吗?

ios - 如何使用 Core Data 中的数据填充 TextField 并更新更改?

swiftui - 在 SwiftUI 文本中获取单词的框架

swiftui - 获取 ScrollView 元素编号 SwiftUI

android-studio - 迁移到新 Places SDK 客户端

android - 新的 Google 地方信息自动填充功能在点击时崩溃