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