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