각 줄을 표현할 때 그 줄을 IOS에서는 'cell'이라고 표현한다.
import UIKit
class CoronaViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
let countries: [Country] =
[
Country(name: "China", numOfConfirmedCases: 4409),
Country(name: "Korea", numOfConfirmedCases: 1130),
Country(name: "Japan", numOfConfirmedCases: 1200),
]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
// 델리게이트 패턴 : tablieview가 tableViewController에 테이블 뷰를 생성하는데
// 필요한 정보들을 물어본다.
extension CoronaViewController: UITableViewDataSource{
// 테이블 뷰가 몇줄인가?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// 몇 줄인지 리턴
return countries.count
}
// 각 줄을 어떻게 표현할 할까?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 어떻게 표현할 지는 이미 테이블 뷰안의 Cell에 구성해두었음
// 테이블 뷰속의 셀을 뽑아오는 메서드,
// optional 이기 떄문에 값이 없을 수도 있으므로 guard로 받아러 리턴해주자.
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CoronaVirusCell else {
return UITableViewCell()
}
// countries 배열을 차례대로
let country = countries[indexPath.row]
// cell의 나라와 확진사 수만 업데이트 시켜보자.
cell.update(country: country)
return cell
}
}
class CoronaVirusCell: UITableViewCell {
@IBOutlet weak var countryName: UILabel!
@IBOutlet weak var numOfConfirmedCases: UILabel!
//celld의 업데이트를 시키면 country의 이름과 확진자 수를 전달하는 함수
func update(country: Country){
countryName.text = country.name
numOfConfirmedCases.text = "\(country.numOfConfirmedCases)"
}
}
struct Country {
let name: String
let numOfConfirmedCases: Int
}