نقل البيانات إلى حزمة تطوير البرامج Swift لنظام التشغيل iOS

يجب أن تكون عملية نقل البيانات من Places SDK for iOS إلى Places Swift SDK for iOS مباشرة ويمكن إجراؤها بشكل تدريجي. بما أنّ البُنى في Places Swift SDK لنظام التشغيل iOS غير متوافقة مع نظيراتها المستندة إلى Objective-C، ننصحك بنقل أجزاء منفصلة من الوظائف استنادًا إلى استخدامات واجهات برمجة التطبيقات في GMSPlacesClient.

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

يجب اتّباع الخطوات التالية لاستخدام Places Swift SDK لأجهزة iOS:

  1. فعِّل Places API (الجديدة).
  2. أضِف حزمة تطوير البرامج (SDK) الخاصة بـ Places Swift إلى العناصر التابعة. يمكنك اختيار تثبيت GooglePlaces أو GooglePlacesSwift أو كليهما.

  3. ابدأ عميل Places باستخدام PlacesClient.

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

على سبيل المثال، لنفترض أنّ تطبيقًا يستخدم Places SDK for iOS يتلقّى اقتراحات إكمال تلقائي استنادًا إلى إدخال نصي، ثم يسترد تفاصيل اقتراح المكان الأول. باستخدام حزمة تطوير البرامج Places SDK for 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 Client

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

// 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. في حزمة تطوير البرامج (SDK) الخاصة بخدمة "أماكن Google" لنظام التشغيل Swift، تم تعديل أسماء الطرق والفئات لإزالة البادئة "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)")
}

معرفة آخر المعلومات

انتقِل إلى صفحة ملاحظات الإصدار الخاصة بحزمة تطوير البرامج (SDK) الخاصة بـ "أماكن Google" لنظام التشغيل iOS للتعرّف على الميزات الجديدة والتغييرات.