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.