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ı:
rightEnum'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
eastBir 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]Görev
KolayCommand 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]))
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
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaMetotlar ve selfBaşlatıcılarSınıflar ReferanstırTekrar - Kütüphane Kartı4Kapsülleme
Erişim DenetimiDışarıdan Salt OkunurDurumu KorumaBaşarısız Olabilen BaşlatıcılarTekrar - Banka Hesabı7Polimorfizm ve Generic'ler
PolimorfizmTür DönüşümüGeneric FonksiyonlarGeneric TürlerTekrar - Şekil Hesaplayıcı2Struct Yapıları ve Değer Türleri
Struct YapılarıDeğer SemantiğiDeğiştirici MetotlarStruct mı Class mıTekrar - Envanter Öğesi5Kalıtım
Alt sınıflarMetotları Geçersiz KılmaBaşlatıcılar ve superfinal ve HiyerarşilerTekrar - Çalışan Hiyerarşisi11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Özellikleri Derinlemesine İnceleme
Hesaplanan ÖzelliklerÖzellik GözlemcileriStatik ÜyelerMetotlu Enum'larTekrar - Sıcaklık GünlüğüKendi başına pratik yap: Swift playground