Enum’larda Fonksiyon ve Initializer Kullanımı
Swift’te enum’ların üye fonksiyonları olabileceği gibi parametrik olan veya olmayan initializer’ları da olabilir. Enum’lar içerisine initializer yazmanın gerekçesi; enum’a kendi sabitlerinden birisiyle ilk değer vermektir. Aşağıda “Bilimsel” isimli enum’a örnek olarak iki farklı init() yazılmıştır.enum Bilimsel : Float {
case g = 9.28
case e = 2.71
case pi = 3.14
init() {
self = .pi }
init (prm:Bilimsel) {
self = prm } }
//Test
var sayi1 = Bilimsel()
print(sayi1.rawValue) //3.14
var sayi2 = Bilimsel(prm:Bilimsel.g)
print(sayi2.rawValue) // 9.28
Enum elemanları için farklı türler belirlenebilir. Örnek:
enum Meyve {
case Elma(Int)
case Karpuz(Double)
case Ayva
}
Swift derleyicisi enum türündeki bir değişken için o enum’ın en uzun eleman türü kadar yer ayırır.
Şayet enum elemanlarına tür bilgisi atanmışsa artık rawValue property’si tanımsız olur.
Hem enum’ın kendisine hem de elemanlarına tür bilgisi atanamaz.
enum Sebze {
case Domate(Int)
case Biber(Double)
case Kabak
}
var s: Sebze = .Biber(2.90)
switch s {
case .Domates(let a):
print(“Domates: \(a)”)
case .Biber(let b):
print(“Biber: \(b)”)
case .Kabak:
print(“Kabak”)
}
Enum elemanlarına iliştiren türler tuple da olabilir. Örnek:
enum Meyve {
case Armut(Int, Int, Int)
case Elma(Double)
case Ayva
}
var m:Meyve = .Armut(30,10,80)
Enum’da ki Durumları Diziye Çevirme
enum CompassDirection: CaseIterable {case north, south, east, west
}
print( CompassDirection.allCases.count) //4
let caseList = CompassDirection.allCases
.map({ "\($0)" })
.joined(separator: ", ")
// caseList == "north, south, east, west"
Hiç yorum yok:
Yorum Gönder
Yorumunuz için teşekkür ederim.