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