در حال مهاجرت به GMSPlaceField به عنوان NS_OPTIONS

با شروع نسخه 4.0.0 Places SDK برای iOS، نوع GMSPlaceField اکنون از ماکرو NS_OPTIONS استفاده می کند. نسخه‌های 3.x SDK دارای GMSPlaceField به‌عنوان NS_ENUM هستند و همچنان پشتیبانی می‌شوند.

  • اگر از Objective-C استفاده می کنید: هیچ پیامدی وجود ندارد. می توانید مانند قبل GMSPlaceField استفاده کنید.

  • اگر از Swift استفاده می کنید: اگر از نحو GMSPlaceField(rawValue:) به عنوان سازنده استفاده کنید، پیاده سازی شما خراب می شود، کدام نسخه های قدیمی SDK به عنوان یک GMSPlaceField? . نسخه 4.0.0 و بالاتر یک مقدار GMSPlaceField غیر اختیاری را برمی گرداند. هر عملیاتی که در اختیاری انجام می شود، مانند بررسی های مشروط یا باز کردن اجباری، با شکست مواجه خواهد شد. علاوه بر این، اکنون می توانید از نحو آرایه برای ترکیب کردن GMSPlaceField استفاده کنید

در حال انتقال کد شما

برخی از دستورات دستوری باز کردن بسته بندی یا باز کردن اجباری در سوئیفت شکسته می شوند. مثال‌های زیر نحوه رفع این مشکلات را نشان می‌دهند و همچنین استفاده از نحو آرایه‌ای برای اعلام GMSPlaceField را نشان می‌دهند:

باز کردن مشروط

عبارت در مثال زیر استفاده از if برای ایجاد یک آرایه GMSPlaceField نشان می دهد که نیاز به باز کردن شرطی دارد. این منجر به یک خطای کامپایلر می شود ("Initializer برای اتصال شرطی باید نوع اختیاری داشته باشد، نه 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 unwrap مقدار از نوع غیر اختیاری 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]