מעבר ל-GMSPlaceField בתור NS_OPTIONS

החל מגרסה 4.0.0 של Places SDK ל-iOS, הסוג GMSPlaceField משתמש עכשיו במאקרו 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 שמחייב פתיחת אריזה מותנית. כתוצאה מכך תתקבל שגיאת מהדר ('המאתחל של הקישור המותנה חייב להיות מסוג Optional, ולא 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 כסוג שאינו אופציונלי. כתוצאה מכך תופיע שגיאת מהדר ("לא ניתן לאלץ את פתיחת הערך של סוג לא אופציונלי 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]