Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
382 kez görüntülendi
ios development kategorisinde tarafından

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
tarafından
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..........
            }
        }
    }
tarafından
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.
...