การย้ายข้อมูลจาก 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 คุณเลือกติดตั้ง
GooglePlaces
GooglePlacesSwift
หรือทั้ง 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))")
}
วิธีการอัปเดตและชื่อคลาส
สุดท้าย ให้ย้ายข้อมูลให้เสร็จสมบูรณ์โดยการปรับโครงสร้างโค้ด 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 เพื่อดูข้อมูลเกี่ยวกับฟีเจอร์ใหม่และการเปลี่ยนแปลง