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