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