Swift - Numaralandırmalar
Numaralandırma, ilgili değerler kümesinden oluşan kullanıcı tanımlı bir veri türüdür. Anahtar kelimeenum numaralandırılmış veri türünü tanımlamak için kullanılır.
Numaralandırma İşlevi
Swift 4'teki numaralandırma, C ve Hedef C'nin yapısına da benzer.
Bir sınıfta bildirilir ve değerlerine o sınıfın örneği aracılığıyla erişilir.
İlk üye değeri, sıralama başlatıcıları kullanılarak tanımlanır.
Standart protokol işlevselliği sağlanarak işlevselliği de genişletilmiştir.
Sözdizimi
Numaralandırmalar enum anahtar kelimesiyle tanıtılır ve tüm tanımlarını bir parantez çifti içine yerleştirir
enum enumname {
// enumeration values are described here
}
Örneğin, haftanın günleri için aşağıdaki gibi bir numaralandırma tanımlayabilirsiniz -
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
Misal
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Welcome to Closures
Swift 4 numaralandırması, üyelerine C ve Amaç C gibi varsayılan değerleri atamaz. Bunun yerine üyeler, numaralandırma adlarıyla açıkça tanımlanır. Numaralandırma adı büyük harfle başlamalıdır (Örn: enum DaysofaWeek).
var weekDay = DaysofaWeek.Sunday
Burada Numaralandırma adı 'DaysofaWeek' değişken bir hafta içi güne atanır. Derleyiciye, veri türünün Pazar gününe ait olduğunu bildirir, bu belirli sınıfın sonraki enum üyelerine atanır. Enum üye veri türü tanımlandıktan sonra, üyelere değerler ve diğer hesaplamalar iletilerek erişilebilir.
Switch İfadesi ile Numaralandırma
Swift 4 'Değiştir' ifadesi, çok yönlü seçimi de takip eder. Belirtilen koşula bağlı olarak belirli bir zamanda yalnızca bir değişkene erişilir. Switch deyimindeki varsayılan durum, belirtilmemiş durumları yakalamak için kullanılır.
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .India:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Climate is Cold
Program ilk olarak Climate'ı numaralandırma adı olarak tanımlar. Ardından 'Hindistan', 'Amerika', 'Afrika' ve 'Avustralya' gibi üyelerinin 'İklim' sınıfına ait olduğu ilan edildi. Şimdi üye Amerika bir Sezon Değişkenine atanmıştır. Ayrıca, Switch case .America'ya karşılık gelen değerleri görecek ve bu özel ifadeye dallanacaktır. Çıktı, "İklim Soğuk" olarak görüntülenecektir. Aynı şekilde tüm üyelere anahtar ifadeleri aracılığıyla erişilebilir. Koşul tatmin olmadığında, varsayılan olarak 'İklim tahmin edilemez' yazdırır.
Numaralandırma ayrıca ilişkili değerlere ve ham değerlere göre sınıflandırılabilir.
İlişkili Değerler ve Ham Değerler Arasındaki Fark
İlişkili Değerler | Ham Değerler |
Farklı Veri Türleri | Aynı Veri Türleri |
Ör: enum {10,0.8, "Merhaba"} | Ör: enum {10,35,50} |
Değerler sabit veya değişkene göre oluşturulur | Önceden doldurulmuş Değerler |
Her defasında bildirildiğinde değişir | Üye için değer aynı |
İlişkili Değerlerle Enum
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Student Marks are: 98,97,95.
Örneğin, öğrencilerin adı ve üç konuda güvence altına alınan işaretlere erişmeyi düşünün, numaralandırma adı öğrenci olarak bildirilir ve enum sınıfında bulunan üyeler, dize veri türüne ait adlardır, işaretler veri türü Tamsayı'nın mark1, mark2 ve mark3 olarak temsil edilir. Öğrenci adına veya puanladıkları notlara erişmek için
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
Şimdi, anahtar kutusu, bu vaka bloğu yürütülürse öğrenci adını yazdıracak, aksi takdirde öğrenci tarafından güvence altına alınan işaretleri yazdıracaktır. Her iki koşul da başarısız olursa, varsayılan blok yürütülür.
Ham Değerlerle Numaralandırma
Ham değerler dizeler, karakterler veya tam sayı veya kayan noktalı sayı türlerinden herhangi biri olabilir. Her ham değer, numaralandırma bildirimi içinde benzersiz olmalıdır. Tam sayılar ham değerler için kullanıldığında, numaralandırma üyelerinden bazıları için değer belirtilmezse otomatik olarak artar.
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Value of the Month is: 5.