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

החל מגרסה 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]