Difference between DataSource / Delegate

Donghee Lee·2022년 3월 17일
0

iOS-Swift

목록 보기
9/20
post-thumbnail

Difference between DataSource / Delegate


애매하게 알면 모르는거라고 생각하기에...
이번에 기본기를 확실하게 잡자.


Data Source

데이터를 받아 뷰를 그려주는 역할
-> 보여주는 것을 담당

코드 예시 1

func tableView(_ tableView : UITableView, numberOfRowsInSection section : Int ) -> Int {
        return self.tasks.count //배열의 개수 반환
    }
    
func tableView(_ tableView : UITableView, cellForRowAt indexPath : IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        //배열에 저장되어 있는 할 일 요소들을 가져오기
        let task = self.tasks[indexPath.row]
        cell.textLabel?.text = task.title
        //체크마크 생성 @20211218LDH Start
        if task.done {
            cell.accessoryType = .checkmark
        } else {
            cell.accessoryType = .none
        }
        //체크마크 생성 @20211218LDH End
        return cell
    }

numberOfRowsInSection와 같이 Section의 row 개수를 반환해서 보여주거나
cellForRowAt와 같이 UITableViewCell을 반환해서 화면에 보여주는 역할


Delegate

어떤 행동에 대한 동작을 제시
사용자에게 보이는 부분중 어떤 것을 클릭하거나 어떤 행동을 했을 때, 그 행동에 대한 동작을 수행.

코드 예시 2

extension ViewController : UITableViewDelegate {
    //선택된 셀의 동작을 제시 ( true <-> false )
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        var task = self.tasks[indexPath.row]
        task.done = !task.done 
        self.tasks[indexPath.row] = task
        self.tableView.reloadRows(at: [indexPath], with: .automatic)
    }
}

위 두 예시를 보면
Delegate에서 선택된 특정 셀에 대한 동작을 제시하고, Data Source에서 반영된 동작으로 화면에 보여준다.

profile
Better than Yesterday

0개의 댓글