Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Swift OOP Kulanımda Aynı Fonksiyona Parametresine İki Ayrı Tipte Class Parametre Olarak Verebilmek

0 oy
38 kez görüntülendi
6, Nisan, 2016 ios development kategorisinde huseyinvural tarafından soruldu

Merhabalar, mümkün olduğunca açık anlantmaya çalıcağım. 

Farklı tableView'lara bağlı farklı tableCell lerim var bu celler bir birinden farklı classlar olsada ortak method ve özellikler barındırıyorlar. 

A Table Cell,B Table Cell, C table Cell

Benim func.swift adında bir class'ım ve bunun içinde cellDerle diye bir methodum var. A Table içinde tableCeller listelenirken. 

cellDerle(tableCell.self,data) şeklinde methoda table cell parametre olarak verip.cellDerle method içinde gerekli işlemleri yapıp uye adını, profil resmini, açıklama metni gibi verileri ilgili alanlara dahil edilmesini sağlıyorum. 

Sorun şurda başlıyor cellDerle method'u 

cellDerle(cell:ATableCell,data:enyobject) şeklinde ben aynı methodu kullanarak BTableCell ' i ve CTableCell ' i de derlemek istiyorum. 

cellDerle methodunu generic olarak yazarsam veya cellDerle(cell:UITableCell,data:enyobject) olarak yazarsam method içinde cell altındaki özellik veya elemanlara erişmeye çalıcağımdan hata alıyorum. Çünkü cell parametresini n tipi generic olduğu için o tip altında method ve özelikleri aramaya çalışıp bulamıyor. Çalışma zamanında olsa ona verdiğim parametredeki class çağırlan method ve özelikleri barındırırdı.

Hedeflediğim methodun yapısı aslında aşağıdaki gibi

func cellDerle(cell:UITableCell,data:enyobject){

     if aTablecell || bTAbleCell tipindeyse{

       cell.uyeID = 10

        cell.userImage = imageView

     }

      if cTableCell Tipindeyse{

         //Bu tipteki classların içinde baslik labelide var

          cell.baslikLabel = "forum.yasinturkoglu"

      }

}

Yapmaya çalıştığım şey yapısal olarak bir saçmalıksa, ne yapıyorsun çocuğum sen derseniz sevinirim :). Değilse böyle bir hiyerarşi oluşturmak için nasıl bir tasarım deseni izlemem gerekir, fikir verebilirseniz çok sevinirim.

Teşekkürler.

1 cevap

0 oy
7, Nisan, 2016 yasin tarafından cevaplandı
7, Nisan, 2016 huseyinvural tarafından seçilmiş
 
En İyi Cevap

custom cell class'larınızı cell derle metodu içerisinde isKindOfClass kullanarak belirleyip, ilgili cell class'ına ait parametrelere ulaşabilirsiniz.

aTableCell adında bir custom cell class'ınız olduğunu varsayarsak;

func cellDerle(cell:AnyObject) {
        if cell.isKindOfClass(aTableCell) {
            if let ATableCell:aTableCell = cell as aTableCell {
                 ATableCell.baslikLabel = 
                 v.s vs..........
            }
        }
    }
7, Nisan, 2016 huseyinvural tarafından yorumlandı
Aradığım yüzde yüz bu olmasada, en azından yapığım mantık hatasını fark ettim.  isKindOfClass fonksiyonunuda yeni gördüm çok teşekkürler.
...