---
# System prepended metadata

title: UITableView 解耦
tags: [tutorial]

---

# UITableView 解耦

###### tags: `tutorial`

> [name=Kevin Chiang]
> [time=Wed, Jun 23, 2021 4:48 PM]

解耦核心思想是【彼此獨立，互不依賴】

在高耦合的情況下，很容易發生一種情況。
明明只是一個很小的需求異動，但是連帶影響到跟它有相依關係的部份。
造成修改一小塊程式碼，導至很多地方都出錯，
要花額外時間去修正被影響的程式碼。

最常見的情況就是`資料`與`商業邏輯`的高耦合，或是`UI`與`商業邏輯`的高耦合。

— — — — — — — — — — — — — — — — — — 

之前有跟大家分享過一篇文章(附連結)，
裡面就提供了 UITableView 非常好解耦的方式，
你只需對 TableView 提供 資料陣列(Models)， 
TableView 就可以幫你正確的生成不同種類的 Cells

完全不需要在 cellForRowAtIndex 寫一堆 switch 來生產不同 cell 及 configCell

— — — — — — — — — — — — — — — — — — 

有使用過 IGListKit 的人會發現，這套操作方式很像 IGListKit 
但是使用這套 protocol 的設計方式，
1. 學習曲線比 IGListKit 低很多，不怕其他人誤用亂設計 (最巨的坑...)
2. 可以讓你享受 IGListKit 控制 data flow 的優點，
3. 又不用面對 IGListKit 一堆行為詭異的動畫與惱人的 API

— — — — — — — — — — — — — — — — — — 

文章連結：
https://medium.com/@kriskline_7025/how-to-build-a-tableview-with-multiple-cell-types-using-protocols-f94ff3320e8d

— — — — — — — — — — — — — — — — — — 

@all
實際操作方式在 JBPorn 的 HomeCell 可以看到，
我真的希望大家可以好好的把這招學起來，
對 `低耦合、高內聚` 的領悟會更加深刻，

早日脫離『麵條式代碼』的深淵