การย้ายข้อมูลจาก Places SDK สำหรับ iOS ไปยัง Places Swift SDK สำหรับ iOS ควรทำได้ง่ายและสามารถทำได้ ทีละขั้นตอน เนื่องจากโครงสร้างใน Places Swift SDK สำหรับ iOS ไม่ สามารถใช้งานร่วมกับโครงสร้างที่เทียบเท่าซึ่งอิงตาม Objective-C เราจึงขอแนะนำให้ย้ายข้อมูล ฟังก์ชันการทำงานแบบแยกส่วนตามการใช้ API ใน GMSPlacesClient
เพิ่ม Places Swift SDK สำหรับ iOS ลงในโปรเจ็กต์
คุณต้องทำตามขั้นตอนต่อไปนี้เพื่อใช้ Places Swift SDK สำหรับ iOS
- เปิดใช้ Places API (ใหม่)
เพิ่ม Places Swift SDK ลงในทรัพยากร Dependency คุณเลือกติดตั้ง
GooglePlacesGooglePlacesSwiftหรือทั้ง 2 อย่างได้เริ่มต้นไคลเอ็นต์ Places ด้วย
PlacesClient
ตัวอย่างการย้ายข้อมูลแบบทีละขั้นตอน
ตัวอย่างเช่น สมมติว่าแอปที่ใช้ Places SDK สำหรับ iOS ได้รับคำแนะนำการเติมข้อความอัตโนมัติโดยอิงตามข้อความที่ป้อน จากนั้นจะดึงข้อมูล รายละเอียดของคำแนะนำสถานที่แรก เมื่อใช้ Places SDK สำหรับ iOS โค้ดที่มีอยู่อาจมีลักษณะ ดังต่อไปนี้
// 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))")
}
}
อัปเดตตัวเริ่มต้นไคลเอ็นต์ Places
หากต้องการปรับโค้ดให้ทันสมัยและใช้ประโยชน์จากความสามารถของ SDK ใหม่ คุณจะต้อง
แทนที่ GMSPlacesClient ด้วย PlacesClient นอกจากนี้ ชื่อพารามิเตอร์จะเปลี่ยนในเมธอดใหม่ ดังนั้นคุณจะต้องอัปเดตพารามิเตอร์เป็น from แทน with สุดท้ายนี้ Places Swift SDK จะใช้ AutocompleteRequest ที่อัปเกรดแล้ว
โค้ดที่อัปเดต
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
รหัสเดิม
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
อัปเดตคำขอเติมข้อความอัตโนมัติ
คุณอาจเริ่มต้นด้วยการอัปเดตโฟลว์คำขอการเติมข้อความอัตโนมัติ โค้ดเดิมใช้
การเรียกกลับเพื่อขอคำแนะนำการเติมข้อความอัตโนมัติ ส่วนโค้ดใหม่ใช้รูปแบบ switch/await
Callback อาจทำให้โครงสร้างโค้ดและการจัดการข้อผิดพลาดซับซ้อนขึ้น Places Swift SDK ใหม่รองรับการทำงานพร้อมกัน
ซึ่งช่วยลดความซับซ้อนของการดำเนินการแบบอะซิงโครนัส
// 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))")
}
แทนที่คลาส เมธอด และ typedef ที่เลิกใช้งานแล้ว
คลาส เมธอด และ typedef ต่อไปนี้ใน Places SDK สำหรับ iOS ถูกเลิกใช้งานแล้วตั้งแต่ v10.4 โดยจะไม่มีให้บริการในเวอร์ชัน 11.0 ซึ่งจะเปิดตัวในไตรมาสที่ 3 ปี 2026
ตารางนี้แสดงเมธอดที่เลิกใช้งานแล้วและเมธอดที่ใช้แทน
| เลิกใช้ | การแทนที่ |
|---|---|
currentPlaceWithCallback หรือ findPlaceLikelihoodsFromCurrentLocationWithPlaceFields |
searchNearbyWithRequest |
lookUpPlaceID หรือ fetchPlaceFromPlaceID |
fetchPlaceWithRequest |
lookUpPhotosForPlaceID หรือ loadPlacePhoto |
fetchPhotoWithRequest |
GMSAutocompletePrediction |
AutocompleteSuggestion |
findAutocompletePredictionsFromQuery หรือ GMSAutocompleteFetcher |
fetchAutocompleteSuggestionsFromRequest |
isOpenWithPlaceID หรือ isOpenWithPlace |
isOpenWithRequest |
GMSAutocompleteResultsViewController, GMSAutocompleteTableDataSource หรือ GMSAutocompleteViewController |
placeAutocomplete |
อัปเดตวิธีการและชื่อคลาส
สุดท้าย ให้ย้ายข้อมูลให้เสร็จสมบูรณ์โดยการปรับโครงสร้างโค้ด fetchPlace และ
นำทั้งการเริ่มต้น GMSPlacesClient และการประกาศ GMSPlaceProperty ออก
ใน Places Swift SDK เราได้อัปเดตชื่อเมธอดและชื่อคลาส
เพื่อนำคำนำหน้า "GMS" ออกแล้ว และคุณต้องอัปเดตตามนั้น
เช่น GMSFetchPlaceRequest เปลี่ยนเป็น FetchPlaceRequest
การจัดการประเภท
วิธี fetchPlace ใหม่ใช้การจัดการประเภทที่ได้รับการปรับปรุง แม้ว่าโค้ดเก่าจะกำหนดให้ส่งค่าดิบของพร็อพเพอร์ตี้ แต่โค้ดใหม่ไม่กำหนดให้นักพัฒนาซอฟต์แวร์ดึงค่าดิบอย่างชัดเจนที่นี่ ซึ่งจะช่วยปรับปรุงความกระชับและความสามารถในการอ่าน
การเกิดขึ้นพร้อมกัน
นอกจากนี้ วิธีใหม่ยังรองรับการทำงานพร้อมกัน ซึ่งช่วยให้แทนที่
การเรียกกลับใน placesClient.fetchPlace ด้วยรูปแบบ switch/await ใน
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)")
}
รับข้อมูลอัปเดต
ไปที่หน้าบันทึกประจำรุ่นสำหรับ Places Swift SDK สำหรับ iOS เพื่อดูข้อมูลเกี่ยวกับฟีเจอร์ใหม่และการเปลี่ยนแปลง