החל מגרסה 4.0.0 של Places SDK ל-iOS, הגרסה GMSPlaceField
type משתמש עכשיו במאקרו NS_OPTIONS
. בגרסאות 3.x של ה-SDK יש GMSPlaceField
בתור NS_ENUM
ועדיין נתמכים.
אם משתמשים ב-Objective-C: אין השלכות. אפשר להמשיך משתמש ב-
GMSPlaceField
כמו קודם.אם משתמשים ב-Swift: ההטמעה לא תפעל אם את התחביר
GMSPlaceField(rawValue:)
בתור ה-constructor, שגרסאות ישנות יותר של ה-SDK שהוחזר כ-GMSPlaceField?
אופציונלי. גרסה 4.0.0 ומעלה מחזירה ערךGMSPlaceField
לא אופציונלי. כל פעולה שמבוצעת בפונקציות האופציונליות, כמו בדיקות מותנות או פעולות מאולצות של פתיחת אריזה, נכשל. בנוסף, עכשיו אפשר להשתמש בתחביר מערך כדי לשלב ביןGMSPlaceField
העברת הקוד
תחבירים מותנים מסוימים לפענוח האריזה או לאילוץ של פתיחת האריזה ייכשלו ב-SWIFT.
הדוגמאות הבאות מראות איך לפתור את הבעיות האלה ומדגימות גם את השימוש
תחביר של מערך להצהרה על GMSPlaceField
:
פתיחת האריזה מותנית
ההצהרה בדוגמה הבאה מראה איך משתמשים ב-if
כדי ליצור
מערך GMSPlaceField
שמחייב פתיחת אריזה מותנית. התוצאה תהיה
בשגיאת מהדר ('המאתחל לקישור מותנה חייב להיות בעל 'אופציונלי'
type, לא 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
סוג אופציונלי. התוצאה תהיה שגיאת מהדר (compiler) ("לא ניתן לאלץ את פתיחת האריזה של הערך)
מסוג לא אופציונלי 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]