
mock_data.json ועובדים איתו מקומית, כי עדיין לא למדו לגשת לשרת. התשובה כוללת success, timestamp, base, date ו-rates.FixerRates עם date, base (String) ומערך rates. struct פנימי בשם Rate מכיל name (String) ו-rate (Double).timestamp, date, success, rates ו-base. הוא נדרש כי מממשים Decodable ידנית.init(from:): שולפים את rates מה-container כמילון [String: Double], ואחר כך date כ-Date ו-base כ-String. בין date ל-timestamp אפשר לבחור, כי יש כפילות.map הופכים כל זוג key-value ל-Rate, בעזרת ה-init של ה-struct, כך שמתקבל מערך במקום מילון.readDemo מוצאת את הקובץ ב-bundle, קוראת Data ומפעילה JSONDecoder עם try!.DateFormatter עם שנה-חודש-יום ואזור זמן UTC מוגדר כ-dateDecodingStrategy בצורת formatted. בלי UTC התאריך נפרש לפי אזור הזמן של המחשב.הטקסט המלא של הדקות הראשונות בהרצאה «דוגמאות לעבודה עם JSON - חלק 3» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים אנחנו רוצים לעשות היום דוגמא אחרונה לפתרון מקרים שכיחים בעבודה עם ג'ייסון אז בואו נראה את הדוגמא הבאה שלנו איך נראה קודם כל הג'ייסון נלך לגוגל ונכתוב פיקסר API פיקסר API הוא בעצם API של שערי מטבע אפשר לרשום פשוט פיקסר.io זה הכתובת אז אולי זה יותר קצר כאן אנחנו מקבלים בעצם מידע על שערי מתח כדי
לקבל מהם בעצם את המידע צריך לעשות הרשמה והתחברות אז אתם מוזמנים לעשות תירשמות. אני אעשה פשוט כאן בסיינאפ, אני אעשה פשוט לוגין ותכף נראה איך נראה התוצר, איך נראה הג'ייסון.
אז כל אחד יעשה את הלוגין שלו ובעמוד הראשון שאנחנו נכנסים אליו אנחנו מקבלים תובת ואת ה-API Key. אוקיי, אז יש לנו פה איזשהו מדריך של שלוש שלבים, API Key זה משהו שנותן לנו גישה ל-API.
כאן אנחנו נכנסים למדריך של השלוש שלבים, Quick Start Guide, ויש לנו פה את הכתובת, אוקיי? בואו נקפוץ לכתובת. לחצתי על הכתובת, ואני מקבל מהם ג'ייסון.
עכשיו, אנחנו לא ניקח כרגע את הג'ייסון הזה וניקח אותו ישר מהאתר, בגלל שאנחנו עדיין לא למדנו איך לעשות את זה. אנחנו נמשיך עדיין עם הדוגמאות ג'ייסון שלנו, שאנחנו מקבלים קובץ ועובדים איתו.
אז אני מעתיק פה את כל התוכן, נלך ל-Finder, ופשוט נערוך פה את הקובץ הזה של מוק דאטה, והפעם נמלא פה את הדוגמה הנוכחית. אם תסתכלו על הדוגמה הנוכחית, אז אנחנו יכולים ליצור קלאס שיש בו סקסס, טיימסטאמפ, בייס, דייט, ומה זה רייטס בעצם?
עכשיו רייטס יכול להיות דיקשונרי מבחינתנו של סטרינג ודאבל, אבל אנחנו לא רוצים לעבוד ככה, בסדר? אני לא ארצה שכל הרייטס ימצאו אצלי בתוך איזשהו דיקשונרי, ולכן אנחנו נרצה לעבוד פה עם הדבר הזה כדי להביא אותו למצב יותר סוויפטי, יותר בסטרקצ'ר שמתאים לסוויפט.
אז אוקיי, זה הקובץ, בואו נייצר לעצמנו פרויקט ב-Xcode ונראה מה אנחנו עושים שם. אז אנחנו ב-Xcode, New Project ו-Single View Application, נקרא לזה JSON Demo Fixer API ונתקדם הלאה.
לתוך הפרויקט נרצה לגרור את הקובץ JSON כמו שעשינו בפעמים הקודמות, ממש מתחת ל-View Controller ואנחנו בוחרים בכל האפשרויות הבאות. אוקיי, עכשיו אנחנו רוצים לייצר לעצמנו איזשהו Struct, נכון? בשביל Fixer Rates, בואו נעשה New File, Swift File,
נקרא לזה Fixer Rates, ומבחינתי איך שהמבנה הזה צריך להיראות זה משהו יותר בסגנון הבא, בואו אני אראה לכם. Struct Fixer Rates, יהיה לנו את התאריך, שזה נהדר, אנחנו יודעים לעבוד עם תאריכים, וזה חשוב במקרה של שערי מתח, נכון?
יהיה לנו את ה-Base שזה String, שזה נגיד יכול להיות יורו או הבסיס הוא על בסיס דולרי, כלומר ביחס למה ממירים, ומעבר לזה יהיה לנו Struct פנימי, נקרא לו נגיד רייט שבסטרקט הפנימי יש לנו ניים שהוא סטרינג למשל הניים יכול להיות ניו ישראל שקל או usd אוקיי
תשאירו לעצמכם פה את הדוגמה הזאת שיהיה לכם רעיון מה הולך ויהיה לנו את השער עצמו שזה הדאבל שראינו בפנים אוקיי אז מעבר לזה יש המון דברים כמו נגיד הטיימפ סטמפ אולי אם אתם רוצים שאפשר גם להוציא אותו אבל אלה המקרים בעצם בוא נסתכל עוד פעם על הג'ייסון אז סקסס טיימסטאמפ זה זמן אם רוצים יש בייס ויש את התאריך עצמו אז
יכול להיות שיהיה לנוח לעבוד איתו ויש את הרייט. אוקיי עכשיו איך אנחנו הופכים את כל הדבר הזה לדיקודאבל נכון? זאת אומרת אנחנו עוד פעם צריכים לממש לבד למה? כי לא בניתי את אותו דבר כמו שהם בנו.
אז בוא נתחיל ברייט פה אני לא צריך לממש כלום דבר שני אני כן אצטרך לייצר לעצמי קודינג כיס אז בוא נעשה אינאם של קודינג כיס שה-raw value שלו זה סטרינג כרגיל ואנחנו מרמשים את הפרוטוקול קוד אין קי וכל הדברים האלה כבר עשינו הרבה פעמים.
הקייסים שלנו זה פשוט לפי השמות בג'ייסון אז פשוט יש לנו את ה-time stamp נגיד ללא שינוי רק נשים לב שכתבנו את הכל טוב יש לנו את הדייט יש לנו סקסס יש לנו את רייטס ויש לנו את הבייס אוקיי?
אז זה הקוד אין קייס. עכשיו אנחנו רוצים לממש דיקודר דיקודבל אז בואו נממש Decodable, ומה זה אומר בעצם? זה אומר שאנחנו צריכים להוסיף לעצמנו Init From Coder, נכון?
אז בואו נעשה את זה. נוסיף אותו פה מעל ה-Inam, שהכול יהיה ביחד, Init From Coder, ודבר ראשון מוצאים קונטיינר, זה אנחנו יודעים, אז טריין, דיקודר, תן לי קונטיינר עם הקיד ביי,