ย้ายข้อมูลไปยัง Places Swift SDK สำหรับ iOS

การย้ายข้อมูลจาก Places SDK สำหรับ iOS ไปยัง Places Swift SDK สำหรับ iOS ควรทำได้ง่ายและสามารถทำได้ทีละน้อย เนื่องจาก Struct ใน Places Swift SDK สำหรับ iOS ไม่สามารถใช้งานร่วมกับ Struct ที่อิงตาม 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 การเรียกกลับอาจเพิ่มความซับซ้อนให้กับโครงสร้างโค้ดและการจัดการข้อผิดพลาด 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 ได้รับการเลิกใช้แล้วตั้งแต่เวอร์ชัน 10.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 เพื่อดูข้อมูล เกี่ยวกับฟีเจอร์และการเปลี่ยนแปลงใหม่ๆ