بدءًا من الإصدار 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]
فرض فك التغليف
توضّح الجملة في المثال التالي استخدام 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]