Swift: Enum-2

0 1.958

Merhaba, daha önce Swift dilinde enum kullanımına giriş yapan bir yazı yayımlamıştım. Şimdi enum’lara biraz daha derinlemesine değinmek istiyorum.

Associated Values
Swift’te enum kullanırken her bir case için yanında tutabileceği ek bilgiler verebiliriz. Bu sayede kullanım alanlarında daha detaylı bir veri alışverişi sağlayabiliriz.

Öncelikle PaymentType adında bir enum yaratalım ve iki case’imiz olsun.
Her bir kart için gerekli olan detay bilgileri de associated value olarak geçiyoruz.

Ardından Payment adında bir struct oluşturuyoruz ve içerisinde amount ve paymentType adında iki değişkenimiz oluyor.

Payment tipinde yarattığımız objelerimizin payment type değişkenine gereken detaylı bilgileri associated value olarak veriyoruz.

Son olarak payment’lardan bir array oluşturuyoruz. Ardından her bir payment için ödeme yönteminde yer alan kart ise kart numarasını veya hesap ise iban’ı yazdırıyoruz. Eğer birden fazla associated value’muz var ve bazılarını o blokta kullanmak istemiyorsak “_” ile onun tanımlanmasını istemediğimizi belirtiyoruz.

Elde ettiğimiz sonuç aşağıdaki gibi olacaktır.

 

 

Where Keyword’ü Kullanımı
Yukarıdaki gibi bir yazdırma işleminde, bir kriterimiz varsa ve yalnızca bunu karşılayan case’lerde yazdırma işlemi yapmak istiyorsak where keywordünden faydalanabiliriz.

Örnek senaryomuzda PaymentType enum’ına yeni bir associated value geçiyoruz ve isBlocked olarak isimlendiriyoruz. Bu değerimiz, Bool tipinde olup belirtilen kart veya hesabın blokeli olup olmadığını belirtecektir.

Ardından kart ve hesap türünden blokeli ve blokesiz olmak üzere yeni Payment nesneleri oluşturalım.

Şimdi IBAN veya kart numaralarını yazdırmak için tekrar bir array oluşturuyoruz. Bu kez bloke olup olmaması bizim için bir kriter olduğu için bu değeri de kullanmamız gerekiyor. Bu sebeple iban veya cardNo değişkenleri gibi isBlocked değişkenini de oluşturuyoruz.

Ardından ilgili case içerisindeki kod bloğu için where  keywordü ile kriter belirtiyoruz.

İşlemin sonucunda aşağıdaki gibi bir sonuç elde ediyoruz.

 

 

 

 

 

Email adresiniz yayınlanmayacaktır.