Menu
Coddy logo textTech

אתחול

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Swift של Coddy. שיעור 4 מתוך 57.

אתחול, שנכתב init, מתבצע בעת יצירת מופע ומעניק למאפיינים את ערכי ההתחלה שלהם. הפרמטרים שלו הופכים לארגומנטים של הקריאה לטיפוס:

class Book {
    var title: String
    var pages: Int

    init(title: String, pages: Int) {
        self.title = title
        self.pages = pages
    }
}

let book = Book(title: "Dune", pages: 412)
print(book.title)
print(book.pages)

פלט:

Dune
412

כל מאפיין צריך לקבל ערך לפני שניתן להשתמש במופע. יש להגדיר מאפיין ללא ערך ברירת מחדל בתוך init, אחרת המחלקה לא תעבור קומפילציה. ניתן להגדיר מאפיין שהוצהר באמצעות let פעם אחת ב-init ולא לשנות אותו לעולם לאחר מכן:

class Book {
    let isbn: String     // מוגדר פעם אחת, ב-init
    var title: String

    init(isbn: String, title: String) {
        self.isbn = isbn
        self.title = title
    }
}

לפרמטרים של init יכולים להיות ערכי ברירת מחדל, כך שהקוראים מעבירים רק את הערכים השונים:

class Timer {
    var seconds: Int
    var label: String

    init(seconds: Int, label: String = "timer") {
        self.seconds = seconds
        self.label = label
    }
}

let egg = Timer(seconds: 300, label: "egg")
let quick = Timer(seconds: 30)
print("\(egg.label) \(egg.seconds)")
print("\(quick.label) \(quick.seconds)")

פלט:

egg 300
timer 30

למחלקה יכולים להיות כמה אתחולים, כל אחד עם פרמטרים שונים. convenience init ממלא כמה ערכים וקורא לאתחול הראשי באמצעות self.init(...):

class Temperature {
    var celsius: Double

    init(celsius: Double) {
        self.celsius = celsius
    }

    convenience init(fahrenheit: Double) {
        self.init(celsius: (fahrenheit - 32) * 5 / 9)
    }
}

print(Temperature(celsius: 20).celsius)
print(Temperature(fahrenheit: 212).celsius)

פלט:

20.0
100.0
challenge icon

אתגר

קל

כתבו את המאתחל של המחלקה Account. הוא מקבל את owner ואת balance האופציונלי, שברירת המחדל שלו היא 0, ושומר את שניהם. לאחר מכן השלימו את summary(), שמחזירה את Ada has 150.

הקוד שסופק קורא שם בעלים, ואם קיימת שורה שנייה, גם יתרת פתיחה. הוא יוצר את החשבון עם היתרה או בלעדיה ומדפיס את summary().

הקוד שלכם ייכתב בקובץ Account.swift. הקובץ main.swift מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.

נסו בעצמכם

// קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var input: [String] = []
while let line = readLine() { input.append(line) }
let account = input.count > 1 ? Account(owner: input[0], balance: Int(input[1])!) : Account(owner: input[0])
print(account.summary())
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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