Menu
Coddy logo textTech

Enums עם מתודות

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

enum מגדיר טיפוס עם קבוצה קבועה של מקרים. ערכים נכתבים עם נקודה, ועל switch לטפל בכל המקרים, כך שהוספת מקרה בהמשך תציג כל מקום שצריך לעדכן:

enum Direction {
    case north, east, south, west
}

let heading = Direction.east
switch heading {
case .north: print("up")
case .east: print("right")
case .south: print("down")
case .west: print("left")
}

פלט:

right

ל-enum יכולים להיות מתודות ומאפיינים מחושבים. בתוכם, self הוא המקרה הנוכחי:

enum Direction {
    case north, east, south, west

    var turnedRight: Direction {
        switch self {
        case .north: return .east
        case .east: return .south
        case .south: return .west
        case .west: return .north
        }
    }
}

print(Direction.north.turnedRight)
print(Direction.west.turnedRight.turnedRight)

פלט:

east
east

ערך גולמי משייך ערך קבוע מסוג אחד לכל מקרה. init(rawValue:) פועל בכיוון ההפוך ומחזיר nil כשאין מקרה תואם:

enum Size: String {
    case small = "S", medium = "M", large = "L"
}

print(Size.medium.rawValue)
print(Size(rawValue: "L") == .large)
print(Size(rawValue: "XL") == nil)

פלט:

M
true
true

ערכים משויכים מאפשרים לכל מקרה לשאת נתונים משלו, וכך טיפוס אחד יכול להכיל ערכים בעלי מבנים שונים. switch קושר את הנתונים באמצעות let:

enum Payment {
    case cash(amount: Int)
    case card(number: String, amount: Int)

    var amount: Int {
        switch self {
        case .cash(let amount): return amount
        case .card(_, let amount): return amount
        }
    }
}

let payments: [Payment] = [.cash(amount: 20), .card(number: "4242", amount: 55)]
print(payments.map { $0.amount })

פלט:

[20, 55]
challenge icon

אתגר

קל

השלם את ה-enum Command באמצעות המקרים forward, back, left ו-right, עם ערכי הגלם F, B, L ו-R. הוסף מאפיין מחושב step שמחזיר את השינוי במיקום: קדימה 1, אחורה -1, שמאלה וימינה 0. לאחר מכן השלם את run(_:), שממיר כל תו לפקודה באמצעות init(rawValue:) (ומדלג על תווים לא מוכרים), ומחזיר position 2, turns 1, skipped 1.

הקוד שסופק קורא שורה אחת של אותיות פקודה ומדפיס את התוצאה של run(_:).

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

נסו בעצמכם

// קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var input: [String] = []
while let line = readLine() { input.append(line) }
print(run(input[0]))
quiz iconבחנו את עצמכם

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

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

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