/***************************************************
UIRefreshControl을 이용해 목록을 갱신할 때마다 임의의 숫자들이 출력되도록 할 것
랜덤 숫자의 범위는 출력할 숫자 개수의 +50 이며, 모든 숫자는 겹치지 않아야 함.
e.g.
20개 출력 시, 랜덤 숫자의 범위는 0 ~ 70
40개 출력 시, 랜덤 숫자의 범위는 0 ~ 90
< 참고 >
(0...10).randomElement() - 0부터 10사이에 임의의 숫자를 뽑아줌
***************************************************/
import UIKit
final class TableViewRefresh: UIViewController {
var range = Array(0...70)
var data:[Int] = []
var setData:Set<Int> = []
override var description: String {
return "Practice 3 - Refresh"
}
let tableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
setupTableView()
}
func setupTableView() {
tableView.frame = view.frame
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "CellID")
view.addSubview(tableView)
let refreshControl = UIRefreshControl()
refreshControl.tintColor = .blue
refreshControl.addTarget(self, action: #selector(randomData), for: .valueChanged)
refreshControl.attributedTitle = NSAttributedString(string: "Refreshing...")
tableView.refreshControl = refreshControl
}
@objc func randomData() {
data = []
setData = []
for _ in 0...range.count {
if setData.count < 20 {
guard let temp = range.randomElement() else {return}
data.append(temp)
setData = Set(data)
}
}
tableView.refreshControl?.endRefreshing()
tableView.reloadData()
}
}
extension TableViewRefresh: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return setData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print(Array(setData))
let cell = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath)
cell.textLabel?.text = "\(Array(setData)[indexPath.row])"
return cell
}
}
