
FullyNamed דורש תכונה בשם fullName מסוג String, שאפשר לקרוא אותה.get, מספיק תכונה מחושבת לקריאה. אם מגדירים גם set, צריך לאפשר כתיבה לתכונה.Movie כותבים את שם הפרוטוקול אחרי נקודתיים, והקומפיילר עוזר להוסיף את הדרישות החסרות. גם enum וגם סטרקט יכולים לממש פרוטוקול.getScript שמחזירה מחרוזת, והטיפוס שמממש את הפרוטוקול חייב לספק אותה.CustomStringConvertible דורש תכונה description מסוג מחרוזת, וכך קובעים איך האובייקט ייראה כשמדפיסים אותו.set, מימוש שיש בו רק get לא עומד בדרישה. לכן בודקים את הדרישות לפני המימוש.Drivable במחלקות מכונית ואופניים, ובשתיהן גם CustomStringConvertible.CustomStringConvertible.הטקסט המלא של הדקות הראשונות בהרצאה «פרוטוקולים ומימושם - Protocols» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים אחרי שסקרנו את הטיפוסים השונים בסוויפט הגענו לסוג האחרון שרשום פה ברשימה הלא הוא הפרוטוקול בעצם פרוטוקול היא מילה באנגלית שמתארת רשימה של הנחיות אוקיי בואו נראה רגע למה הכוונה בתכנון פרוטוקול מהווה רשימה של הנחיות הנחיות זה יכול להיות איזה מתודות אני צריך ליצור ואילו תכונות אני צריך לממש
טיפוס שמממש את הפרוטוקול, הוא בעצם עושה מה שאומרים לו, הוא ממלא את הדרישות. איזה דרישות? אומרים לי בעצם בפרוטוקול לממש מתודה או לממש תכונה או לממש מתודות ותכונות.
אנחנו כמובן נראה רבות במהלך הקורס שימוש בפרוטוקולים ונבין ככה טוב מאוד למה הם משמשים, אז בואו נקפוץ שנייה לפרויקט שלנו ונראה דוגמא חיה.
בואו נראה. אני אגדיר לנו פה פרוטוקול, ראשון, פרוטוקול, נקרא לפרוטוקול שלי נניח פיולי ניימד אוקיי זאת אומרת מי שמממש את הפרוטוקול יהיה לו בטוח שם מלא פול ניימד או פיולי ניימד כמו שקראתי לו זה פרוטוקול שמכריח לאנשים שיהיה להם שם מלא מה זאת אומרת אני מכריח משתנה מסוג סטרינג שהוא יהיה
יקרא פול ניימד ואני אכריח פה שיהיה להם סטרינג ובוא נאמר אני מכריח שיהיה רק גט אוקיי אז מותר לי לרשום רק וזה יהיה read only או שאני יכול לרשום שזה יהיה גם גטר וגם סטר.
שלום וברוכים הבאים. אחרי שסקרנו את הטיפוסים השונים בסוויפט, הגענו לסוג האחרון שרשום פה ברשימה הלא הוא הפרוטוקול. בעצם פרוטוקול היא מילה באנגלית שמתארת רשימה של הנחיות.
בואו נראה רגע למה הכוונה. בתכנון פרוטוקול מהווה רשימה של הנחיות. זה יכול להיות איזה מתודות אני צריך ליצור ואילו תכונות אני צריך לממש. טיפוס שמממש את הפרוטוקול הוא בעצם עושה מה שאומרים לו, הוא ממלא את הדרישות.
איזה דרישות? אומרים לי בעצם בפרוטוקול לממש מתודה או לממש תכונה או לממש מתודות ותכונות. אנחנו כמובן נראה רבות במהלך הקורס שימוש בפרוטוקולים ונבין ככה טוב מאוד למה הם משמשים, אז בואו נקפוץ שנייה לפרויקט שלנו ונראה דוגמא חיה.
בואו נראה. אני אגדיר לנו פה פרוטוקול, ראשון, פרוטוקול, ואני אקרא לפרוטוקול שלי נניח Fuly Named, אוקיי? זאת אומרת, מי שמממש את הפרוטוקול יהיה לו בטוח שם מלא.
פול ניים או פיולי ניימד, כמו שקראתי לו, זה פרוטוקול שמכריח לאנשים שיהיה להם שם מלא. מה זאת אומרת? אני מכריח משתנה מסוג סטרינג שהוא יהיה יקרא פול ניים, ואני אכריח פה שיהיה להם סטרינג ואנחנו צריכים להחליט האם מדובר פה אך ורק ב-read only, בגתר,
או שמא מדובר גם בגתר וגם בסלטר? כלומר, האם מדובר ב-computed property או ב-stored property? האם יש גם אפשרות לשמור את הערך של התכונה או רק לקרוא את הערך של התכונה?
ואני אתן לכם דוגמאות לשניהם. אבל כרגע, בואו נגיד דוגמה ראשונה, תכונה מחושבת, computed property. תמונה מחושבת אז יש לה רק get read only בואו נראה עכשיו הנה אז יש לי פה רשימת דרישות דרשתי בתוך הפרוטוקול רשימת דרישות תקראו לפרוטוקול
שלכם איך שאתם רוצים וברשימת של הדרישות בתור התחלה דרשתי אך ורק משתנה אחד full name בואו ננסה לממש את הפרוטוקול הזה בקלאס מובי אוקיי אני לא יורש פה כרגע משום דבר ובואו נאמר שלמובי יש לנו סטרינג של הניים של הסרט טייטל ויש לנו גם שנת היציאה שזה יהיה מספר שלם וכמובן חייב
בנאי בקלאסים אז אוקיי בואו נגדיר בנאי שמקבל סטרינג טייטל ויר מסוג אינטג'ר כרגיל עכשיו איך בואו נשמור את התכונות איך מממשים פרוטוקול בסוויפט מאוד מאוד דומה לירושה אני פשוט אומר שהקלאס מובי מממש את הממשק ועם ככה מה הפול ניים של הסרט עכשיו הוא ידרוש ממני לממש את הממשק אני הכרזתי שאני רוצה
לממש את הממשק הקומפיילר עוזר לי באמת לממש אותו אני לוחץ פה על הכפתור של הפיקס ומממש את הממשק כלומר מי שמממש את הממשק יש לו פול ניים מסוג סטרינג והוא חייב לפחות להחזיר ערך עבור השם המלא של הסרט בואו נקבע שהשם המלא של הסרט יהיה כותרתו ושנת היציאה בואו נראה אז אני מחזיר פה את הטייטל ומכב ואחר כך מחזיר גם את שנת היציאה של אותו סרט, בסדר?
עכשיו אני מממש את הפרוטוקול כהלכה, למה? בואו ננסה עוד פעם לדון, זוכרים שהסינטקס הזה נקרא תכונה מחושבת, נכון? קומפיוטד פרוטוקול, למה אני בעצם מממש את הפרוטוקול?
כי הפרוטוקול אומר לי אתה חייב שיהיה לך גט לפחות עבור פול ניים, אוקיי? אז מה אני עשיתי? אני יצרתי משתנה מסוג פול ניים שהוא סטרינג, וכמובן החזרתי רק גט של התכונה.
הייתי גם יכול להחזיק משתנה מסוג סטרינק שנקרא פול ניי, וכאן הייתי יכול להחזיר משהו, וזה גם בסדר, אוקיי?
אבל בעצם עשיתי פה מעבר לדרישות. עשיתי פה גם גט וגם סט. זה קצת יותר ממה שצריך. זה גם לא נקרא קומפיוטד פרופרטי, איך קוראים לתכונות הרגילות?
קוראים להן, נכון? סטורד פרופרטי. אז גם עשינו פה תזכורת טובה לגבי תכונה מחושבת להבדיל מתכונה רגילה.
אז פה בממשק הזה דרשו ממני אך ורק computed ובאמת שfull name של הסרט צריכה להיות תכונה מחושבת אז בואו נחזיר פה את המצב לקדמותו בצורה היפה הזאת. אז ראינו איך קלאס יכול לממש פרוטוקול אתם רואים בואו ננסה רגע לקחת את זה עוד צעד אחד קדימה ולהגיד פה שאנחנו דורשים גם get וגם set נראה איך זה מסתדר.
אז עכשיו אני לא דורש computed property יותר למעשה אנחנו דורשים כבר כמעט stored property ואז אנחנו נהיה חייבים להחזיר פה איזשהו גם get וגם set בסדר תראו עכשיו זה כבר הפך להיות stored property בדרישות ואנחנו כן מממשים את הפרוטוקול כן מצייתים לדרישות יש לי גם get וגם set לרוב יכריחו אותנו לממש כרגע זה אמרנו read and write נכון
get and set לרוב יכריחו אותנו לממש Computed Properties אבל זה לא חובה יש מקרים ויש מקרים אז פרוטוקול יכול להכריח אתכם להוסיף משתנים בין אם זה משתנה מחושב ובין אם זה משתנה שמור תכונה שמורה במידת הצורך פרוטוקול גם יכול להכריח אותנו לממש פעולות בואו נראה נניח שיש לי עוד פרוטוקול שנקרא בוא נאמר Scriptable
שאפשר לכתוב אותו לסקריפט בסרטים יש איזשהו מושג כזה עכשיו, רשימת הדרישות תהיה לנו פאנקשן שנקראת getScript והיא מחזירה סטרינג,