1

我正在研究如何編寫模塊化清理代碼,同時使用UITableView & UICollectionView,我發現很好的博客寫Objc.io更輕的ViewControllers。雖然按照作者給出的做法,我想出了一個段落,說明有關Same Cell type and Multiple Model Object不詳細,只是描述性的。 我只是想問有沒有人建議我們如何以更好的模塊化方式實現這一點? 該段說,這樣的事情,UITableView:同一單元格,多模型對象(MVC)

In cases where we have multiple model objects that can be presented using the same cell type, we can even go one step further to gain reusability of the cell. First, we define a protocol on the cell to which an object must conform in order to be displayed by this cell type. Then we simply change the configure method in the cell category to accept any object conforming to this protocol. These simple steps decouple the cell from any specific model object and make it applicable to different data types.

誰能解釋這是什麼意思? 我知道這是脫離主題,但它可以幫助別人編寫更好的代碼。

回答

0

這與介紹ViewModel或ViewAdapter類似。一個簡單的例子是一個單元格顯示任何項目的描述。說如果你給單元格一個用戶,它顯示他/她的全名。如果您提供郵件,則會顯示主題。關鍵是單元不關心給它(用戶或郵件)的確切內容。它只需要描述每個項目,所以它需要幫助它從每個不同類型的單個模型中提取描述字符串。這是ViewModel。

然後不是:Cell => User或Cell => News。使用:Cell => ViewModel => User或Cell => ViewModel => News。代碼示例:

class ViewModel { 

    private Object _item; 

    public ViewModel(Object item) { 
     _item = item; 
    } 

    public String getDescription() { 
     if (_item instanceof User) { 
      return ((User)_item).getFullName(); 
     } else if (_item instanceof Mail) { 
      return ((Mail)_item).getSubject(); 
     } 
     return ""; 
    } 
} 
+0

在這裏,它不告訴寫條件代碼取決於模型的類型。 這裏它要求聲明一些接口(用java術語)或協議(用ObjC術語)。 –

+0

相同的概念,不同的實施方式。上面的代碼片段是使用Adapter最簡單的方法之一。我以爲你只是想明白... – Robo