Menu
Coddy logo textTech

מחלקות הן הפניות

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

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

class Wallet {
    var coins = 10
}

let mine = Wallet()
let alias = mine
alias.coins = 25
print(mine.coins)

פלט:

25

=== בודק אם שתי הפניות מצביעות על אותו מופע. שני מופעים נפרדים הם אובייקטים שונים, גם כאשר כל המאפיינים שלהם זהים:

class Wallet {
    var coins = 10
}

let a = Wallet()
let b = a
let c = Wallet()
print(a === b)
print(a === c)

פלט:

true
false

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

class Wallet {
    var coins = 10
}

func payFee(_ wallet: Wallet) {
    wallet.coins -= 3
}

let w = Wallet()
payFee(w)
payFee(w)
print(w.coins)

פלט:

4

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

class Wallet {
    var coins = 10
}

let shared = Wallet()
let team = [shared, shared]
team[0].coins = 99
print(shared.coins)
print(team[1].coins)

פלט:

99
99
challenge icon

אתגר

קל

חוליה חולקת Budget אחד. השלימו את spend(_:amount:), פונקציה שמקבלת תקציב ומחסרת ממנו את הסכום רק אם נשאר מספיק, ומחזירה true כאשר ההוצאה אושרה. לאחר מכן השלימו את runTeam(start:purchases:): צרו תקציב אחד, תנו לכל רכישה להשתמש באותו תקציב, והחזירו שורה אחת לכל רכישה (ok 30 או denied 80) ואחריה left 20.

הקוד שסופק קורא את התקציב ההתחלתי ואת הרכישות כשורה מופרדת בפסיקים, ומדפיס כל שורה שהוחזרה.

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

נסו בעצמכם

// קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var input: [String] = []
while let line = readLine() { input.append(line) }
let purchases = input[1].split(separator: ",").map { Int($0)! }
for line in runTeam(start: Int(input[0])!, purchases: purchases) { print(line) }
quiz iconבחנו את עצמכם

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

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

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