Property Wrapper

0 1.671

Property wrapper Swift 5.1 ile kullanılmaya başlayan, alt sürümlere uyumlu(backward compatible) bir özellik olarak karşımıza çıkmıştır. Bir özelliğin sahip olduğu getter/setter metotlarını kapsülleyerek projenin her yerinde benzer kodların yazılmasının önüne geçmek amacıyla gündeme gelmiş ve 2015 senesinde konuşulmaya başlandıktan sonra nihayet 0258 Proposal ile beraber duyurulmuştur. Property wrapper, özelliğin kodlanması ve saklanma şekli arasında bir katman olarak düşünülmüştür.

Property wrapper sayesinde, bir property’nin yönetimini bir kez gerçekleyip, yeniden kullanılabilir hale getirebiliriz. Property wrapper class, enum ve strut ile kullanılabilir.

Kullanım Koşulları

Property wrapper kullanırken, oluşturmak istediğiiz struct, enum veya class’ı “@propertyWrapper” özelliği ile tanımlıyoruz.

Property wrapper olarak tanımlandıktan sonra da “wrappedValue” adında zorunlu bir değişkeni barındırması gerekiyor. Bu değişken derleyicinin erişmesi gereken değeri belirliyor. Ayrıca wrapper ile aynı erişim düzeyine sahip olması gerekiyor.

Örnekler

Büyük bir projede filtreleme özelliğimizde, kod tekrarlarını ve sınıfımızda filtreli ve filtresiz iki değişken yerine tek bir değişkende tutmamızı sağlar.

Örnekte öncelikle filtre uygulamak istediğimiz modellerin “Filterable” protokolünü uygulamasını istedik. Böylece model üzerinde hangi alanlarda filtreleme yapılması istenilen alanlar belirlenebilecek.

Wrapper’ımız  filtreli ve tüm elemanlar olarak ayrılacak biçimde 2 array ve filtreleme stringi olmak üzere 3 değişkene sahip olacaktır.

Ardından wrapper’ımızın sahip olduğu “filtered” değişkenine her erişilmek istenildiğinde de var ise “filterString”e göre filtreleme yaparak filtreli array’i yoksa da ilk değeri tutan array’i (wrappedValue) dönüyor.

Öncelikle “Pokemon” adında modelimizi oluşturduk ve “Filterable” protokolüne uymasını sağladık. Burada hem name hem de species alanlarına göre filtrelenebilme özelliğini verdik.

Ardından ViewController’ımızda wrapperı’mızın wrappedValue tipini “[Pokemon]” yani Pokemon array’ı şeklinde belirterek yarattık. Sonrasında “viewDidLoad” içerisinde wrappedValue değişkenini doldurduk. Arama alanında da her değişiklik olduğunda girilen string’i wrapper’ın “filterString” ine veriyoruz.

Son olarak tableView’ı wrapper’ımızın “filtered” değişkenini kullanarak besliyoruz. Tekrar hatırlarsak, wrapper bize eğer aranan bir kelime var ise, wrapperValue’u filtreleyip bir array dönüyordu yoksa da wrapperValue’nun kendisini yani tüm listeyi dönüyordu. Böylece istediğimiz şekilde filtreleme işlemini gerçekleştiriyoruz.

Bu örnekte projemiz boyunca yapılabilecek tüm filtrelemerde yalnızca bir wrapper yaratıp, filtrelenmek istenen model için de “Filterable” protokolünü gerçekleyip kolayca filtreleme işlemi yapılabilecektir.

 

Email adresiniz yayınlanmayacaktır.