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

החל מגרסה 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 לא אופציונלי. כל פעולה שמבוצעת על הערך האופציונלי, כמו בדיקות מותנות או ביטול אריזה בכוח, תיכשל. בנוסף, עכשיו אפשר להשתמש בתחביר של מערך כדי לשלב בין GMSPlaceFields

העברת הקוד

תחביר מסוים של ביטול עטיפה מותנה או ביטול עטיפה בכוח יישבר ב-Swift. בדוגמאות הבאות אפשר לראות איך לפתור את הבעיות האלה, וגם איך להשתמש בתחביר של מערך כדי להצהיר על GMSPlaceField:

הסרת עטיפה מותנית

בדוגמה הבאה אפשר לראות איך משתמשים ב-if כדי ליצור מערך GMSPlaceField שנדרש בו ביטול עטיפה מותנה. זה יגרום לשגיאת קומפיילר ("Initializer for conditional binding must have Optional type, not 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]