Di chuyển sang Places Swift SDK dành cho iOS (Xem trước)

Di chuyển từ SDK Địa điểm dành cho iOS sang Địa điểm Swift SDK dành cho iOS (Xem trước) phải đơn giản và có thể thực hiện được tăng dần. Vì các cấu trúc trong SDK Swift của địa điểm dành cho iOS (Xem trước) không tương thích với các phiên bản dựa trên Mục tiêu C, bạn nên chuyển sang các phần chức năng riêng biệt dựa trên việc sử dụng API trong GMSPlacesClient.

Thêm Places Swift SDK dành cho iOS (Xem trước) vào dự án của bạn

Các bước sau đây là bắt buộc để sử dụng Places Swift SDK dành cho iOS (Xem trước):

  1. Bật API Địa điểm (Mới).
  2. Thêm SDK Swift địa điểm dành cho iOS (Bản xem trước) cho các phần phụ thuộc.
  3. Khởi chạy ứng dụng Địa điểm bằng PlacesClient.

Ví dụ về quá trình di chuyển từng bước

Ví dụ: giả sử một ứng dụng dùng SDK Địa điểm dành cho iOS nhận đề xuất tự động hoàn thành dựa trên thông tin đã nhập, sau đó tìm nạp chi tiết về đề xuất địa điểm đầu tiên. Sử dụng SDK Địa điểm dành cho iOS, mã hiện có có thể trông giống như như sau:

// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()

// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)

let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.origin = center
filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest)

let request = GMSAutocompleteRequest(query: "Sicilian piz")
request.filter = filter

client.fetchAutocompleteSuggestions(from: request) { (results, error) in
  guard let results, error == nil else {
    print("Autocomplete error: \(String(describing: error))")
    return
  }

  // Fetch Place Request.
  guard let placeID = results.first?.placeSuggestion?.placeID else { return }
  let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}

  let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)

  client.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
    guard let place, error == nil else { return }
    print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
  }
}

Cập nhật trình khởi tạo Ứng dụng địa điểm

Để hiện đại hoá mã và tận dụng các tính năng của SDK mới, bạn sẽ cần thay thế GMSPlacesClient bằng PlacesClient. Ngoài ra, tên thông số đã được thay đổi trong phương thức mới, do đó bạn sẽ cần cập nhật thành from thay vì with. Cuối cùng, SDK Swift địa điểm dành cho iOS (Xem trước) sử dụng phiên bản được nâng cấp AutocompleteRequest.

Đã cập nhật mã

// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared

Mã gốc

// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()

Cập nhật yêu cầu tự động hoàn thành

Bạn có thể bắt đầu bằng cách cập nhật quy trình yêu cầu tự động hoàn thành. Mã cũ sử dụng lệnh gọi lại để yêu cầu đề xuất tự động hoàn thành, trong khi mã mới sử dụng Hoa văn switch/await. Lệnh gọi lại có thể khiến cấu trúc mã phức tạp hơn và xử lý lỗi. SDK Swift địa điểm mới dành cho iOS (Bản xem trước) hỗ trợ tính năng đồng thời, để đơn giản hoá các hoạt động không đồng bộ.

// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared

// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)

let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
  switch results.first {
  case .place(let placeSuggestion):
    placeID = placeSuggestion.placeID
  case .none:
    fallthrough
  @unknown default:
    return
  }
case .failure(let placesError):
  print("Autocomplete error: \(placesError)")
  return
}

// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let placesClient = GMSPlacesClient.shared()

// Fetch Place Request.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}

let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)

placesClient.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
  guard let place, error == nil else { return }
  print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
}

Cập nhật phương thức và tên lớp

Cuối cùng, hãy hoàn tất quá trình di chuyển bằng cách tái cấu trúc mã fetchPlace và xoá cả khởi động GMSPlacesClientGMSPlaceProperty khai báo. Trong Places Swift SDK dành cho iOS (Xem trước), phương thức và tên lớp đã được cập nhật để xoá "GMS" tiền tố và phải được cập nhật tương ứng; ví dụ: GMSFetchPlaceRequest trở thành FetchPlaceRequest.

Xử lý kiểu

Phương thức fetchPlace mới sử dụng khả năng xử lý kiểu được cải thiện. Mặc dù mã cũ bắt buộc chuyển giá trị thô của thuộc tính, thì mã mới không yêu cầu tìm nạp rõ ràng các giá trị thô ở đây, do đó cải thiện độ chính xác và dễ đọc.

Đồng thời

Ngoài ra, phương thức mới này hỗ trợ mô hình đồng thời, cho phép thay thế lệnh gọi lại trong placesClient.fetchPlace với mẫu switch/await trong placesSwiftClient.fetchPlace.

// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared

// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)

let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
  switch results.first {
  case .place(let placeSuggestion):
    placeID = placeSuggestion.placeID
  case .none:
    fallthrough
  @unknown default:
    return
  }
case .failure(let placesError):
  print("Autocomplete error: \(placesError)")
  return
}

// Fetch Place Request.
let fetchPlaceRequest = FetchPlaceRequest(placeID: placeID, placeProperties: [.displayName, .websiteURL])
switch await placesSwiftClient.fetchPlace(with: fetchPlaceRequest) {
case .success(let place):
  print("Place found: \(place.displayName): \(String(describing: place.description))")

case .failure(let placesError):
  print("Place not found: \(placeID); \(placesError)")
}