Menu
Coddy logo textTech

Metotlu Enum'lar

Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 15 / 57.

Bir enum, sabit bir durum kümesine sahip bir tür tanımlar. Değerler nokta ile yazılır ve switch her durumu ele almalıdır; bu nedenle daha sonra bir durum eklemek, güncellenmesi gereken her yeri gösterir:

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")
}

Çıktı:

right

Enum'ların metotları ve hesaplanmış özellikleri olabilir. İçlerinde self geçerli durumu ifade eder:

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)

Çıktı:

east
east

Bir raw value, her duruma bir türün sabit değerini bağlar. init(rawValue:) bunun tersini yapar ve hiçbir durum eşleşmediğinde nil döndürür:

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

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

Çıktı:

M
true
true

İlişkili değerler her durumun kendi verilerini taşımasını sağlar; böylece tek bir tür, farklı şekillerdeki değerleri barındırabilir. switch, verileri let ile bağlar:

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 })

Çıktı:

[20, 55]
challenge icon

Görev

Kolay

Command enum'ını forward, back, left ve right durumlarıyla, F, B, L ve R ham değerleriyle tamamla. Konumdaki değişikliği döndüren step adlı hesaplanan bir özellik ekle: forward için 1, back için -1, left ve right için 0. Ardından, her karakteri init(rawValue:) ile bir komuta dönüştüren (bilinmeyen karakterleri atlayan) ve position 2, turns 1, skipped 1 döndüren run(_:) işlevini tamamla.

Sağlanan kod, bir satır komut harfi okur ve run(_:) sonucunu yazdırır.

Kodun Command.swift ve Functions.swift dosyalarına yazılmalıdır. main.swift sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var input: [String] = []
while let line = readLine() { input.append(line) }
print(run(input[0]))
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Swift playground