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

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

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

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

مهاجرت کد شما

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

باز کردن شرطی

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