החל מגרסה 4.0.0 של Places SDK ל-iOS, המאקרו NS_OPTIONS
משמש עכשיו לסוג GMSPlaceField
. גרסאות 3.x של ה-SDK כוללות את GMSPlaceField
כ-NS_ENUM
והן עדיין נתמכות.
אם אתם משתמשים ב-Objective-C: אין השלכות. אתם יכולים להמשיך להשתמש ב-
GMSPlaceField
כמו קודם.אם אתם משתמשים ב-Swift: ההטמעה שלכם תיפסק אם אתם משתמשים בתחביר
GMSPlaceField(rawValue:)
כבונה, שגרסאות ישנות יותר של ה-SDK החזירו כ-GMSPlaceField?
אופציונלי. בגרסה 4.0.0 ואילך מוחזר ערךGMSPlaceField
לא אופציונלי. כל פעולה שמבוצעת על הערך האופציונלי, כמו בדיקות מותנות או ביטול אריזה בכוח, תיכשל. בנוסף, עכשיו אפשר להשתמש בתחביר של מערכים כדי לשלב ביןGMSPlaceField
s
העברת הקוד
תחביר מסוים של ביטול עטיפה מותנה או ביטול עטיפה בכפייה יישבר ב-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
כסוג לא אופציונלי. התוצאה תהיה שגיאת קומפילציה ("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]