אתחול
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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אתגר
קלכתבו את המאתחל של המחלקה 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())
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
תרגלו בעצמכם: Swift אונליין