
MyImage עם name מסוג String, ו-Decodable. את ה-JSON מדביקים כמחרוזת רב-שורות, ממירים ל-Data ב-UTF-8 ומפענחים למערך. URL הוא Decodable בעצמו, ולכן אפשר להגדיר את השדה ישירות כ-URL.Info.plist את App Transport Security Settings עם Allow Arbitrary Loads, אך אפל לא ממליצה על כך.UIScrollView ומכבים את translatesAutoresizingMaskIntoConstraints. מצמידים אותו לארבעת הצדדים של ה-view. בתוכו UIStackView אנכי עם alignment בערך fill ו-distribution בערך fillProportionally, מוצמד ארבעה צדדים ל-scroll view. נדרש גם אילוץ שהרוחב של ה-stack view שווה לרוחב ה-scroll view, אחרת הגלילה לא עובדת.Data(contentsOf:), יצירת UIImage מה-Data, יצירת UIImageView ושימוש ב-addArrangedSubview של ה-stack view.DispatchQueue.main.async, אחרת מתקבלת שגיאה על שינוי layout מ-thread משני. אחרי התיקון התמונות מופיעות אחת אחרי השנייה ואפשר לגלול.הטקסט המלא של הדקות הראשונות בהרצאה «הורדת תמונות מהאינטרנט ב-Xcode» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים אחרי שסקרנו את האפשרויות שלנו עם gcd הגיע הזמן לדוגמה מעשית כדי לראות איך כל הדברים האלה מתחברים ביחד וגם אנחנו נרצה ללמוד היום על עבודה עם סקרול ויו שזה משהו שבהחלט גם ישמש אתכם בנוסף אז אנחנו משתמשים כרגע באותו פרויקט שעשינו בשיעור הקודם אני פשוט יוריד פה את הקריאות האלה לגרו פאמפקן
ואנחנו נרצה לעשות משהו קצת יותר פרקטי בנוסף אנחנו נרצה בעצם בשיעור לטעון תמונות מהאינטרנט ובשביל זה אנחנו נצטרך קודם כל שיהיו לנו כתובות לתמונות.
אז בואו נקפץ רגע לדפדפן, נחפש את האתר הזה שראינו באחד השיעורים כמו קראו, ואנחנו נרצה פשוט דוגמה לתמונות, בסדר? אז אני מוריד פה את כל השדות.
אנחנו רוצים כמה תמונות לדוגמה, נניח 10 תמונות יספקו אותנו. אנחנו רוצים לקבל אותן בפורמט של ג'ייסון. נקרא להם לדוגמה אימג', אז כאילו זה יהיה השם של התמונה, אז בואו נקרא לזה name.
ופה אנחנו רוצים פשוט לבחור ב-image, בואו נחפש פה. יש לנו פה dummy image url, אוקיי. אז אני מקבל פה json, והפורמט הוא בין 100 ל-250 בגודל.
אנחנו רוצים בעצם לקבל מערך, ואנחנו לא רוצים ערכים של null, ובואו נעשה רגע preview, אוקיי.
אז קיבלתי פה 10 urlים, נכון? בתור מערך של דברים כאלה. אתם יודעים כבר לעבוד עם json, אז זה לא אמור להיות משימה מסובכת.
בואו נקפוץ ל-xcode ונפרסם רגע את ה-json הזה. כדי לפרסר את הג'ייסון אנחנו נעשה לעצמנו סטראקט של אימג' או מיי אימג' ופה בפנים יהיה לנו וריאבל של ניים או פשוט let של ניים כי אנחנו לא הולכים לעשות פה שינוי הוא יהיה מטיפוס של סטרינג וכאן אנחנו נרצה להגיד שזה דיקורדבל
כלומר שאפשר ככה לפרסר את זה מג'ייסון ודבר ראשון שאנחנו נעשה אנחנו נרצה לפרסר את הג'ייסון שלנו אז let ג'ייסון שווה כאן אני משתמש במולטיליין סטרינג אוקיי זאת אומרת שאני יכול להדביק פה את הג'ייסון שלי בחופשיות וזה ה-JSON.
עכשיו, זה סטרינג, נכון? אנחנו רוצים להפוך את זה לדאטה כבר, אז אפשר להגיד נקודת דאטה, Using Encoding של UTF-8, ועכשיו ה-JSON הזה הוא כבר אופציונל דאטה, בואו נבדוק, יפה.
אנחנו רוצים, אם אין JSON, אם אין דאטה, אנחנו לא רוצים להמשיך לעבוד, זה בטוח יעבוד נכון, אז בואו נעשה guard let, נקרא לזה JSON data, שווה לדבר הזה, else return פה למטה, וכרגע יש לי כבר דאטה.
אנחנו מכירים את זה משיעורים קודמים. אז אני אגיד guard.let.images שווה try ואנחנו נבקש מJSON Decoder חדש שיעשה לנו Decode לתמונות התמונות הם מערך של MyImage זה הטיפוס נקודה סלף כמובן מהדאטה של JSON דאטה אז עכשיו יש לי בעצם את כל התמונות כסטרינגים רגע אלס ריטר נכון וגם אנחנו נרצה לשבור את השורה
הזאת כי היא ארוכה מדי אז בואו ניתן פה איזשהו אנטר נניח כאן ועכשיו אמור להיות לנו מערך של תמונות של סטרינגים בוא נעשה פרינט אימג'ס ונראה את זה אוקיי מצוין עכשיו אלה סטרינגים מה שמעניין זה שurl בעצמו הוא כן דיקורדאבל ולכן אני אפילו יכול לקבל פה ישר url בלי לעשות איזשהו המרה או טרנספורמציה אני מריץ שוב כדי להראות לכם את הנקודה המעניינת
הזאת url הוא דיקורדאבל ולכן הדברים האלה עכשיו הטיפוס שלהם זה url בלי לעבוד יותר מדי קשה אוקיי עכשיו אפל לא מאפשרת כל כך עבודה עם http בקליר טקסט הפרוטוקול הזה של http הוא קצת לא מאובטח ודי ישן ואנחנו משתדלים לעבור היום לעבודה עם HTTPS למזלנו דמי אימג'ה השארת שעליו יושבות התמונות כן מאפשר עבודה אוטומטית עם
HTTP Secure אחרת הייתי צריך לפתוח פה את ההגדרות של הפרויקט ולהגיד שאנחנו רוצים לאפשר לטעון מידע מהאינטרנט גם מכתובות שהן clear text בסדר גם מכתובות שהן HTTP אם הייתי רוצה לאפשר את זה אני אראה לכם איך עושים את זה בכל זאת כדי שיהיה לכם את הרעיון למרות שזה לא מומלץ על ידי אפל באף צורה אם הייתי רוצה לאפשר בפרויקט טעינת מידע
מאתרים לא מאובטחים, מאתרים שיש להם כתובת של HTTP רגיל, הייתי צריך ללכת לקובץ הגדרות של הפרויקט, הלוא הוא ה-info.plist, וכאן להוסיף שורה, אז פלוס.
רגע, בוא נלחץ על זה איכשהו. ואנחנו רוצים להוסיף app transport security settings, ובתוך זה אני אפתח את זה כאן, וכאן בפנים אנחנו רוצים להגיד allow arbitrary loads true, אוקיי? אחרת, פשוט, כאן אנחנו רוצים לשנות את זה ל-yes או ל-true.
אחרת, אני לא אוכל לעבוד עם אתרים שהם לא Secure. עכשיו, זו לא המלצה, בסדר? ההמלצה של אפל היא לא לעשות דברים כאלה. יש גם אפשרות לציין באיזה דומיינים אנחנו מאפשרים לטעון HTTP בקליר טקסט, אבל שוב פעם, אפל ממליצה לכם פשוט לעבור ל-HTTP Secure.
טוב, כיסינו את הנקודה הזאת. יש לנו בעצם דאטה של התמונות, יש לנו מערך של URLים. איך עכשיו אנחנו מתקדמים? אנחנו נרצה להציג את כל התמונות האלה בסטאק ויו, אוקיי? כלומר, תחשבו שאנחנו באים לפה לסטורי בור ורוצים להוסיף סטאק ויו.
עכשיו, הסטאק ויו הזה, אנחנו לא נרצה שהוא יתפוס את כל המסך, אלא אנחנו רוצים שיהיה אפשרות לעשות סקרול. כדי לעשות סקרול, אנחנו נשתמש ב-UI סקרול ויו.
עכשיו, אפשר להוסיף מפה את הפקדים האלה ולהוסיף את כל האילוצים שאני הולך להראות לכם. יש פה סקרול ויו, וכמובן סטאק ויו אתם מכירים יופי, אבל בגלל שכל האילוצים שאני הולך לעשות הם אילוצים יחסית מורכבים מה שנקרא וצריכים להיות בדיוק בדיוק מדויקים אחרת לא יעבוד לכם הסקרול ויו אז אני אראה לכם פשוט את העבודה עם האילוצים
מהקוד כדי שזה יהיה לכם מסודר ואת אותם אילוצים שאני עושה לפט רייט תוכלו אחר כך לעשות גם בסטורי בורד אבל בגלל שאילוצים מורכבים אנחנו נכתב אותם הפעם מהקוד אז בואו נעשה את זה. מטרה להוסיף סקרול ויו