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