با شروع نسخه 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]