Menu
Coddy logo textTech

סגירות נגררות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 39 מתוך 56.

כאשר closure הוא הארגומנט האחרון לפונקציה, אפשר לכתוב אותו מחוץ לסוגריים. זוהי צורת trailing-closure, וכך קוד Swift נקרא באופן טבעי.

let nums = [1, 2, 3]
// הצורה הרגילה
let a = nums.map({ $0 * 2 })
// צורה עם סגירה בסוף
let b = nums.map { $0 * 2 }

אם הסגירה היא הארגומנט היחיד, גם הסוגריים נעלמים. זו הסיבה שכל מה שראית עד כה נראה כמו מבנה בקרה מותאם אישית.

אפשר לכתוב פונקציות משלך שמקבלות סגירות באותו אופן:

func repeatN(_ n: Int, action: () -> Void) {
    for _ in 0..<n {
        action()
    }
}
repeatN(3) {
    print("hi")
}

צורת הסגירה הנגררת גורמת ל-repeatN(3) { ... } להיראות כמו לולאה מובנית. זו בדיוק המטרה: מבני בקרה שבונים בעצמכם נראים בדיוק כמו אלה שבספרייה הסטנדרטית.

challenge icon

אתגר

קל

הגדירו פונקציה collect ש:

  • מקבלת מספר שלם n וסגירה builder: (Int) -> String
  • קוראת ל־builder עבור כל i מ־1 עד n (כולל), ומחזירה את המערך של המחרוזות שנוצרו

קראו מספר שלם מהקלט הסטנדרטי, קראו ל־collect עם המספר הזה באמצעות סגירה נגררת שמייצרת "i=<i>" עבור כל ערך, והדפיסו את התוצאה המאוחדת באמצעות ,.

עבור הקלט 4, הפלט הוא i=1,i=2,i=3,i=4.

נסו בעצמכם

let n = Int(readLine()!)!

// TODO: func collect(_ n:Int, builder:(Int)->String) -> [String]
// לאחר מכן יש לקרוא ל־collect(n) { ... } ולהדפיס את התוצאה כשהיא מחוברת באמצעות ","
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: Swift אונליין