ย้ายข้อมูลไปยัง Places Swift SDK สำหรับ iOS (เวอร์ชันตัวอย่าง)

การย้ายข้อมูลจาก Places SDK สำหรับ iOS ไปยัง Places Swift SDK สำหรับ iOS (เวอร์ชันตัวอย่าง) ควรทำได้ง่ายและทยอยทำได้ เนื่องจากโครงสร้างใน Places Swift SDK สําหรับ iOS (เวอร์ชันตัวอย่าง) ไม่เข้ากันได้กับโครงสร้างที่เขียนด้วย Objective-C เราจึงขอแนะนําให้ย้ายข้อมูลฟังก์ชันการทํางานแบบแยกส่วนตามการใช้ API ใน GMSPlacesClient

เพิ่ม Places Swift SDK สำหรับ iOS (เวอร์ชันตัวอย่าง) ลงในโปรเจ็กต์

คุณต้องทําตามขั้นตอนต่อไปนี้เพื่อใช้ Places Swift SDK สําหรับ iOS (เวอร์ชันตัวอย่าง)

  1. เปิดใช้ Places API (ใหม่)
  2. เพิ่ม Places Swift SDK สําหรับ iOS (เวอร์ชันตัวอย่าง) ลงในรายการที่ต้องพึ่งพา คุณเลือกติดตั้ง GooglePlaces, GooglePlacesSwift หรือทั้ง 2 รายการก็ได้

  3. เริ่มต้นใช้งานไคลเอ็นต์ 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 สุดท้ายนี้ ทาง AutocompleteRequest ของ Places Swift SDK สำหรับ iOS (เวอร์ชันตัวอย่าง) ได้รับการอัปเกรด

รหัสที่อัปเดต

// 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 ใหม่สําหรับ iOS (เวอร์ชันตัวอย่าง) รองรับการทำงานพร้อมกัน ซึ่งจะทําให้การดำเนินการแบบอะซิงโครนัสง่ายขึ้น

// 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 สำหรับ iOS (เวอร์ชันตัวอย่าง) เราได้อัปเดตเมธอดและชื่อคลาสเพื่อนำคำนำหน้า "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 (เวอร์ชันตัวอย่าง) เพื่อดูข้อมูลเกี่ยวกับฟีเจอร์และการเปลี่ยนแปลงใหม่ๆ