Swift: Enum

0 1.711

Enum’lar, birbiri ile alakalı değerleri gruplamamızı sağlayan yapılardır. Basit örneklerden başlarsak; haftanın günleri, cinsiyetler, takas(alım-satım) gibi içerisinde birden fazla değer barındıran fakat temelde bir çatıya ait olan yapıları nitelendirirler. Value type olarak çalışırlar.

Yukarıdaki gibi iki farklı şekilde de ifade edilebilirler.

rawValue

Enum’lara bir tip vererek ardından istediğimiz her bir case için de bu tipi karşılamasını sağlayarak rawValue oluşturabiliriz.

Örneğin yukarıdaki gibi Pazartesi günü için bir rawValue tanımı yaparsak aşağıdaki gibi bir sonuç alacağızdır.

 

 

Peki rawValue değeri yalnızca bu şekilde bir String göstermek gibi basit bir şey için mi kullanılacaktır. Tabii ki hayır.

Şimdi backend’den bize bazı bilgilerin enum olarak değil de belirli stringler ile geldiğini düşünelim. Fakat bunlar bizim için bir çatıyı oluşturan farklı durumlar olsun. Benim vereceğim örnekte vergiler üzerinden gideceğiz. Client tarafında kendimiz bir Enum oluşturalım ve String rawValue’a sahip olsun. Ardından backend’den geleceğine emin olduğumuz, el sıkışılan durumlar için case’leri oluşturalım ve her ihtimale karşı bir tane de “other” case’i oluşturalım.

Son olarak Enum’a ait bir static fonksiyon oluşturarak “init(rawValue:)” metodu ile bir case’ini oluşturup bize döndürmesini sağlayalım. “init(rawValue:)” metodu geriye optional döndüğü için böyle bir metot oluşturmak istedim. “init(rawValue:)” bir case oluşturamadan bize dönerse de “other” case’i döndürmesini isteyelim.

Daha sonrasında da iki farklı case oluşturarak sonuçları görelim.

 

 

Geçerli bir rawValue ile oluşturmaya çalıştığım zaman istediğim sonucu bana verdi. Fakat geçersiz bir rawValue ile gittiğim zaman da “other” case’i bana döndürmeyi başardı.

 

Eğer Int türünde bir rawValue’a sahip olmak istersek ve hiçbir rawValue değerini biz vermezsek, 0’dan başlayarak artırımlı olarak tüm case’lere ait rawValue’ları verecektir.

Yani yukarıdaki koddan aşağıdaki gibi bir çıktı alacağız.

 

 

 

Fakat örneğin biz bir tanesine rawValue değeri verdik ve kalanlara yine bir dokunuşta bulunmadıysak, verilen case’den sonraki case’lerin rawValue’ları o case’in rawValue’sunu takiben artırımlı olarak devam edecektir.

 

 

 

Peki şimdiye kadar sürekli bir case’in oluşturulması yönünü inceledik. Şimdi de biraz elimizde oluşmuş case’e ait işlemleri nasıl yaparız sorusuna cevap arayalım.

Elimizde bir case var ise bunu bir switch-case kontrolü ile kullanabiliriz.

Yukarıdaki kod parçasında pazar gününe özel bir mesaj vermek istiyoruz ve aşağıdaki gibi bir sonuç alıyoruz.

 

 

Biraz daha fazlasını Swift: Enums 1 burada bulabilirsiniz.

 

Email adresiniz yayınlanmayacaktır.