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