الانتقال إلى تطبيق Places Swift SDK لنظام التشغيل iOS (معاينة)

الانتقال من حزمة تطوير برامج الأماكن لأجهزة iOS إلى يجب أن تكون حزمة تطوير برامج الأماكن Swift لنظام التشغيل iOS (معاينة) واضحة ويمكن تنفيذها بشكل تدريجي. نظرًا لأن البُنى في حزمة Places Swift SDK لنظام التشغيل iOS (معاينة) ليست كذلك متوافقة مع نظيراتها المستندة إلى الهدف جـ، فنحن نوصي بتحويل منفصلة من الوظائف بناءً على استخدامات واجهات برمجة التطبيقات في GMSPlacesClient.

إضافة حزمة Places Swift SDK لنظام التشغيل iOS (معاينة) إلى مشروعك

يجب اتّباع الخطوات التالية لاستخدام Places Swift SDK لنظام التشغيل iOS (معاينة):

  1. تفعيل Places API (جديد):
  2. إضافة Places Swift SDK لنظام التشغيل iOS (معاينة) لتبعياتك.
  3. تهيئة عميل الأماكن مع PlacesClient

مثال على عملية النقل خطوة بخطوة

على سبيل المثال، لنفترض أن تطبيقًا يستخدم حزمة تطوير برامج الأماكن لنظام التشغيل iOS. يتلقى اقتراحات الإكمال التلقائي استنادًا إلى النص الذي تم إدخاله، ثم يجلب تفاصيل اقتراح المكان الأول. استخدام حزمة تطوير برامج الأماكن لأجهزة 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))")
  }
}

تحديث مهيئ عميل الأماكن

لتحديث التعليمات البرمجية والاستفادة من إمكانات حزمة تطوير البرامج (SDK) الجديدة، يجب: إلى استبدال GMSPlacesClient بـ PlacesClient. بالإضافة إلى ذلك، تغيير أسماء المعلمات في الطريقة الجديدة، لذا ستحتاج إلى تحديث إلى from بدلاً من with. أخيرًا، تستخدم حزمة تطوير البرامج (SDK) لـ Places Swift لنظام التشغيل iOS (معاينة) الإصدار الذي تمت ترقيته 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 الجديدة لنظام التشغيل 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)")
}