이제 초입단계이기 때문에 직접 코드로 화면을 구현하는게 아니라
Story Board를 작성했다
Todo리스트를 많이 쓰는 입장에서 실제로 만들어보고 싶었다
간단하게 만들거기때문에 세 가지 기능만 넣었다
내가 적은 리스트들을 보여줄 수 있는 하나의 테이블을 만든다.
구조체로 List 하나의 틀을 만든다 ( 타이틀과 체크표시 들어있는)
(tasks라는 배열을 만들어서 적은 list를 전부 넣어놓는다)
+버튼 누르면 모달창이 나오고 textField에 List를 작성한다.
(취소버튼도 왼쪽에 놔두고 취소 누르면 모달창 자연스럽게 사라지게)
모달 창 안에 '등록' 버튼 누르면 테이블에 보여지게 하기!
어플을 종료해서 localDB안에 저장되어서 나중에도 볼 수 있게 하기
Edit버튼 누르면 편집 가능 그리고 List옆으로 밀면 삭제 가능하게!!
추가적으로 테이블내에서 List 자유롭게 위아래로 이동 가능하게 !!
스토리보드는 최소한으로 쓰자!
네비게이션만 사용해서 edit을 할때 편집화면으로 가게끔 해준다!
cell을 코드에서 생성할거니까 스토리보드에서 Cell의 identifier만 설정! + style은 Basic으로!
테이블은 스토리보드에서 생성!!
가장 기본이자 중요한 거는 일단 적을 수 있어야한다!!!!
Task라는 구조체를 만들어서 Cell안에 들어갈 정보를 묶는다.
전체 Task를 가지고 있는 Tasks라는 배열을 따로 놔둔다
var tasks = [Task]() {
didSet {
self.saveTasks() // 이 부분은 task를 UserDefaults안에 저장!
}
}
let alert = UIAlertController(title:~~~)
let registerButton 안에 handler부분
{
[weak self] _ in
guard let title = alert.textField?[0].text else {return }
let task = Task(title: title, done:false)
self?.tasks.append(task)
self?.tableView.reloadData()
}
self.present(alert, animated: true, completion: nil)
일단 강한 참조를 피하기 위해 weak self를 핸들러 안에 정의했다 이건 아래서 자세히 설명
alert.addTextField해서 적어놓은 내용을 핸들러 안에 있는 title에 저장했다!!
그 다음 Task구조체를 만들어서 tasks라는 배열에 넣고 바로 tableView를 리로딩했다
당연한거지만 추가를 했으면 다시 리로딩 해야하는거!!
didSet {} ,
핸들러 안에 [weak self],
tableView.reloadData(),
Map과 CompactMap,
UserDefaults.standard (object와 set),
as? [[String: Any ]] 이렇게 적는이유
reloadRows()와 reloadData()차이
DataSource와 Delegate 이거는 매일 보자 -> 뭐가 들어있고 적재적소에 쓰는법 계속 기르기!
guard에서 else {이 부분에 return 과 return nil 둘 중 무엇을 선택해야할지}