نقل البيانات إلى GMSPlaceField باسم NS_OPTIONS

بدءًا من الإصدار 4.0.0 من حزمة تطوير البرامج Places SDK for iOS، يستخدم النوع GMSPlaceField الآن الماكرو NS_OPTIONS. تحتوي الإصدارات 3.x من حزمة SDK على GMSPlaceField كـ NS_ENUM ولا تزال متوافقة.

  • في حال استخدام Objective-C: ليس هناك أي آثار. يمكنك مواصلة استخدام GMSPlaceField كالمعتاد.

  • في حال استخدام Swift: سيتعذّر تنفيذ الرمز إذا كنت تستخدم بنية GMSPlaceField(rawValue:) كدالة إنشاء، لأنّ الإصدارات القديمة من حزمة SDK كانت تعرضها كقيمة اختيارية GMSPlaceField?. يعرض الإصدار 4.0.0 والإصدارات الأحدث قيمة GMSPlaceField غير اختيارية، وستتعذّر أي عمليات يتم تنفيذها على القيمة الاختيارية، مثل عمليات التحقّق الشرطية أو عمليات فك التغليف الإجباري. بالإضافة إلى ذلك، يمكنك الآن استخدام بنية المصفوفة لدمج GMSPlaceField

نقل الرمز

ستتعطّل بعض صيغ إلغاء التغليف الشرطي أو إلغاء التغليف الإجباري في Swift. توضّح الأمثلة التالية كيفية حلّ هذه المشاكل، كما توضّح كيفية استخدام بنية المصفوفة لتعريف GMSPlaceField:

الفتح الشرطي

تعرض الجملة في المثال التالي استخدام if لإنشاء مصفوفة GMSPlaceField تتطلّب فك تغليف شرطي. سيؤدي ذلك إلى حدوث خطأ في المترجم البرمجي ("يجب أن يكون للمهيئ الخاص بالربط الشرطي نوع Optional، وليس GMSPlaceField").

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

لحلّ هذه المشكلة، عليك إزالة عبارة if، كما هو موضّح هنا:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

يمكنك أيضًا استخدام بنية المصفوفة، كما هو موضّح هنا:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

Force unwrapping

توضّح الجملة في المثال التالي استخدام GMSPlaceField كنوع غير اختياري. سيؤدي ذلك إلى حدوث خطأ في المترجم البرمجي ("Cannot force unwrap value of non-optional type GMSPlaceField."):

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

لحلّ هذه المشكلة، استخدِم GMSPlaceField كنوع اختياري، كما هو موضّح هنا:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

يمكنك أيضًا استخدام بنية المصفوفة، كما هو موضّح هنا:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]