Việc di chuyển từ SDK Địa điểm dành cho iOS sang SDK Swift Địa điểm dành cho iOS (Bản xem trước) sẽ diễn ra đơn giản và có thể thực hiện từng bước. Vì các cấu trúc trong SDK Swift của Places dành cho iOS (Bản xem trước) không tương thích với các cấu trúc tương tự dựa trên Objective-C, nên bạn nên di chuyển 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 SDK Swift của Địa điểm dành cho iOS (Bản xem trước) vào dự án
Bạn cần thực hiện các bước sau để sử dụng SDK Swift của Địa điểm dành cho iOS (Bản xem trước):
- Bật API Địa điểm (Mới).
Thêm SDK Swift của Địa điểm dành cho iOS (Bản xem trước) vào phần phụ thuộc. Bạn có thể chọn cài đặt
GooglePlaces
,GooglePlacesSwift
hoặc cả hai.Khởi động ứng dụng Places bằng
PlacesClient
.
Ví dụ về cách di chuyển từng bước
Ví dụ: giả sử một ứng dụng sử dụng SDK Địa điểm cho iOS nhận được các đề xuất tự động hoàn thành dựa trên nội dung nhập văn bản, sau đó tìm nạp thông tin chi tiết về đề xuất địa điểm đầu tiên. Khi sử dụng SDK Địa điểm cho iOS, mã hiện có có thể trông giống 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 chạy ứng dụng Places
Để hiện đại hoá mã và tận dụng các tính năng của SDK mới, bạn cần thay thế GMSPlacesClient bằng PlacesClient. Ngoài ra, tên tham số sẽ thay đổi trong phương thức mới, vì vậy, bạn cần cập nhật tham số thành from
thay vì with
. Cuối cùng, SDK Swift của Địa điểm dành cho iOS (Bản dùng thử) sử dụng AutocompleteRequest đã nâng cấp.
Mã đã cập nhật
// 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 tất. 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 mẫu switch
/await
. Lệnh gọi lại có thể làm phức tạp thêm cấu trúc mã và việc xử lý lỗi. SDK Swift Places mới cho iOS (Bản xem trước) hỗ trợ tính năng đồng thời, giúp đơn giản hoá các thao tác 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 tên 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ả phần khai báo GMSPlaceProperty
lẫn phần khởi chạy GMSPlacesClient
. Trong SDK Swift của Places dành cho iOS (Bản dùng thử), phương thức và tên lớp đã được cập nhật để xoá tiền tố "GMS" và phải được cập nhật cho phù hợp; ví dụ: GMSFetchPlaceRequest
trở thành FetchPlaceRequest
.
Xử lý kiểu
Phương thức fetchPlace
mới sử dụng tính năng xử lý loại được cải thiện. Mặc dù mã cũ yêu cầu truyền giá trị thô của thuộc tính, nhưng mã mới không yêu cầu nhà phát triển tìm nạp giá trị thô một cách rõ ràng tại đây, nhờ đó cải thiện tính ngắn gọn và khả năng đọc.
Tính đồng thời
Ngoài ra, phương thức mới hỗ trợ tính năng đồng thời, cho phép thay thế lệnh gọi lại trong placesClient.fetchPlace
bằng 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)")
}
Luôn nắm bắt tình hình
Truy cập vào trang ghi chú phát hành của SDK Swift cho Địa điểm dành cho iOS (Bản xem trước) để tìm hiểu về các tính năng và thay đổi mới.