์๋
ํ์ธ์ Foma ๐ ์
๋๋ค!
์ค๋์ ํ ์ด๋ธ๋ทฐ ๋ฐ์ดํฐ์์ค๋ฅผ ์ ๋๋ฆญํ๊ฒ ๋ง๋ค์ด์ ๋ชจ๋ ๋ทฐ์ปจํธ๋กค๋ฌ์์ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์๋
๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ๊ฒ ์ต๋๋ค!
๋ฐ๋ก ์์ํ ๊ฒ์~
StoryBoard
์คํ ๋ฆฌ๋ณด๋๋ ์๋์ ๊ฐ์ด ํ ์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ฃผ์๊ณ ์ ์ ์ด๋ฆ์ ํ์ํ ๋ ์ด๋ธ์ ์ถ๊ฐํด์คฌ์ต๋๋ค.
์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ ์ ํด๋์ค ์ด๋ฆ์ NameTableViewCell๋ก ํด์ฃผ์ธ์! ( ๋์ค์ ๋ง๋ค์ด์ค๊ฑฐ์์!)
identifier๋ ์ ์ด๋ฆ๊ณผ ๋๊ฐ์ด ํด์ฃผ๊ฒ ์ต๋๋ค.
NameTableVIewCell
์๋์ ๊ฐ์ด ๋ ์ด๋ธ์ ์ฐ๊ฒฐํด์ฃผ์ธ์.
import UIKit
class NameTableViewCell: UITableViewCell {
@IBOutlet weak var name: UILabel!
}
TableViewDataSource
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ฌํ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ์์ค ํ์ผ์ ๋ง๋ค์ด๋ณผ๊ฒ์!
๋จผ์ ๋ฐ์ดํฐ ์์ค๋ ์๋์ ๊ฐ์ด ์ด๋ค ์ ์ธ์ง ํ์ธํ CellType๊ณผ Cell์ ๊ตฌ์ฑํ๋ Item์ ๊ฐ์ง๊ณ ์๋ NSObject ๋ง๋ค์ด์ค๋๋ค.
class TableViewDataSource<CellType,Item>:NSObject,UITableViewDataSource where CellType:UITableViewCell {
ํ๋กํผํฐ๋ ์๋์ ๊ฐ์ด ์ ์ ์์ด๋ดํฐํผ์ด,์์ดํ ๋ค, ๊ทธ๋ฆฌ๊ณ ๋์ค์ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ด๋ค ์ ํ์ ๊ณผ ์์ดํ ์ ๊ฐ์ง๊ณ ์๋์ง
์ฝ๋ฐฑ์ผ๋ก ์๋ ค์ค configure ํด๋ก์ ธ๋ฅผ ์ ์ธํด์ค๋๋ค.
let identifier:String
var items:[Item]
let configure:(CellType,Item) -> ()
๊ทธ ๋ค์์ผ๋ก ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ตฌ์ฑํ ๋ ๋ฐ๋์ ํ์ํ numberofRowsInSection๊ณผ cellForRowAt์ ์์ฑํ๊ฒ ์ต๋๋ค.
์๋์ ๊ฐ์ด items์ ๊ฐฏ์๋งํผ ์ด์ ๋ฐํํด์ฃผ๊ณ ํด๋น ์์ด๋ดํฐํผ์ด๋ฅผ ๊ฐ์ง ์ ์ผ๋ก ๋ก์ฐ๋ฅผ ๊ตฌ์ฑํด์ค๋๋ค.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//์์ดํ
๋งํผ ๋ฐํ
return self.items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//์์ด๋ดํฐํผ์ด์ ๋ฐ๋ผ์ ์
์ ๊ตฌ์ฑํจ.
guard let cell = tableView.dequeueReusableCell(withIdentifier: self.identifier, for: indexPath) as? CellType else { fatalError("\(self.identifier)๋ฅผ ํ์ธํด์ฃผ์ธ์!") }
//ํ์ฌ ์์ดํ
let item = self.items[indexPath.row]
//์ด๋ค ์
๊ณผ ์ด๋ค ์์ดํ
์ธ์ง ์๋ ค์ค
self.configure(cell,item)
//์
์ ๋ฐํ
return cell
}
๊ทธ๋ฆฌ๊ณค ๋ง์ฝ items์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ค updateDataSource ๋ฉ์๋๋ ๋ง๋ค์ด์ฃผ์ธ์!
func updateDataSource(_ items:[Item]) {
self.items = items
}
TableViewController
์ด์ ๋ฐ์ดํฐ์์ค๋ฅผ ํ ์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ๋ง๋ค์ด์ค ๋ฐ์ดํฐ ์์ค์ ํ์ฌ ํ ์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๊ตฌ์ฑํ ์ ๊ณผ ์์ดํ ์ ๊ตฌ์ฑํ ํ์ ์ ๋ฃ์ด์ค ๋ค ์ ์ธํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณค names๋ผ๋ ์ด๋ฆ๋ค์ ๊ฐ์ง๊ณ ์๋ ์์ดํ ๋ค์ ๋ง๋ค์ด์ฃผ๊ฒ ์ต๋๋ค.
import UIKit
class TableViewController: UITableViewController {
private var dataSource:TableViewDataSource<NameTableViewCell,String>!
var names:[String] = ["Foma","Gran","Young"]
override func viewDidLoad() {
super.viewDidLoad()
์๋์ ๊ฐ์ด ํ์ฌ ํ ์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ธํ ํ๋ setTableViewDataSource๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
๋ฐ์ดํฐ์์ค๋ ์์์ ์ ์ธํ ๋ฐ์ดํฐ ์์ค์ ํ์ฌ ๋์ธ ์ ์ ์์ด๋ดํฐํผ์ด์ ์์ดํ ๋ค์ ๋ฃ์ด์ค๋๋ค.
์ฝ๋ฐฑ์ผ๋ก ๋ฐ์ ์ ๊ณผ ์์ดํ ์ ์ฐ๊ฒฐํด์ ์ด๋ฆ์ ๋์์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ์ธํ ํ ๋ฐ์ดํฐ์์ค๋ฅผ ํ์ฌ ํ ์ด๋ธ๋ทฐ ๋ฐ์ดํฐ ์์ค๋ก ์ค์ ํ๊ฒ ์ต๋๋ค.
func setTableViewDataSource() {
self.dataSource = TableViewDataSource(identifier: "NameTableViewCell", items: names, configure: { cell, name in
cell.name.text = name
})
self.tableView.dataSource = dataSource
}
๋ทฐ๋๋๋ก๋์ ์คํ์ํค๋๊ฑฐ ์์ง ๋ง์์ฃผ์ธ์!
override func viewDidLoad() {
super.viewDidLoad()
setTableViewDataSource()
}
์คํํ๋ฉด
์ด๋ ๊ฒ ์คํํ๋ฉด ์๋์ ๊ฐ์ด ์ ์์ ์ผ๋ก ์ด๋ฆ๋ค์ด ํ ์ด๋ธ๋ทฐ์ ์ ์ฉ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค!
Update
TableViewController
๊ทธ ๋ค์ ํ ์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์๋์ ๊ฐ์ด ์์ดํ ์ด ์์ ๋ ๋ updateDataSource ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ดํ ๋ค์
๋ฃ์ด ํธ์ถํด์ค๋๋ค.
func addName(_ name:String) {
self.names.append(name)
self.dataSource.updateDataSource(names)
}
์ค๋์ ์ด๋ ๊ฒ ๋ฐ์ดํฐ์์ค๋ฅผ ์ฌํ์ฉํด ํ ์ด๋ธ๋ทฐ์ ์ ์ฉํ๋ ๋ฒ์ ๋ํด์ ๋ค๋ค๋ณด์๋๋ฐ์.
์ด๋ ๊ฒ ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ์์ค๋ฅผ ๋ง๋ค์ด๋๊ณ ์ ์ฉํ๋ ํ ์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ ์ฝ๋๋ ์งง์์ง๊ณ ๋ ์ด๋ค ์ ์ด๋ ๋๊ฐ์ ๋ฐฉ์์ผ๋ก
์ ์ฉํ ์ ์๊ณ ํนํ MVVM ๋์์ธ ํจํด์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์งค๋ ์์ดํ ์ ๋ทฐ๋ชจ๋ธ๋ค์ ์ ์ฉํ๊ธฐ ์ฌ์์ ๋๋ฌด ๋๋ฌด
์ ์ตํ ์ ๋ณด์์ต๋๋ค!!
ํน์๋ผ๋ ๊ถ๊ธํ์ ์ ์ด ์๊ฑฐ๋ ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
'๐ iOS > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] Unit Test์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด๊ธฐ (2) | 2021.07.19 |
---|---|
[iOS] ๊ฑด๊ฐ ๋ฐ์ดํฐ ์ฌ์ฉํด๋ณด๊ธฐ(feat.HealthKit) (4) | 2021.06.08 |
[iOS] ๋๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๋ค๊ธฐ(feat. CocoaPods) (0) | 2021.05.30 |
[iOS] ์๋ฎฌ๋ ์ดํฐ ํ๋ฉด ๋ นํํ๊ณ GIFํ์ผ๋ก ์ ์ฅํ๊ธฐ (0) | 2021.05.03 |
[iOS] Callkit๊ณผ PushKit์ ์ด์ฉํด์ ์ ํ ํธ์ฌํ๊ธฐ (5) | 2021.04.12 |
๋๊ธ