החל מגרסה 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
s
העברת הקוד
תחבירים מסוימים של ביטול אריזה מותנה או ביטול אריזה בכפייה ייכשלו ב-Swift.
בדוגמאות הבאות מוצגות הדרכים לפתרון הבעיות האלה, וגם הדגמה של שימוש בתחביר מערך כדי להצהיר על GMSPlaceField
:
ביטול אריזה מותנה
ההצהרה בדוגמה הבאה מראה שימוש ב-if
כדי ליצור מערך GMSPlaceField
שדורש ביטול אריזה מותנה. התוצאה תהיה שגיאה במהדר ('ה-initializer לקישור מותנה חייב להיות מסוג 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
כסוג לא אופציונלי. הפעולה הזו תגרום לשגיאה במהדר ('Cannot force unwrap value
of non-optional type 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]