IOS 분석 - ToDoList

박경현·2022년 4월 3일
0

이제 초입단계이기 때문에 직접 코드로 화면을 구현하는게 아니라
Story Board를 작성했다

설명 -> 왜 만들었는지(페르소나 설정)
그리고 필요한 요소들!!

페르소나

Todo리스트를 많이 쓰는 입장에서 실제로 만들어보고 싶었다

필요 요소

간단하게 만들거기때문에 세 가지 기능만 넣었다

+ 버튼 누르면 모달창 나와서 거기에 적으면 테이블에 적히는거

했는지 안했는지 확인할 수 있는 체크표시

삭제 및 편집 가능한 기능 넣기

순서도

  1. 내가 적은 리스트들을 보여줄 수 있는 하나의 테이블을 만든다.

  2. 구조체로 List 하나의 틀을 만든다 ( 타이틀과 체크표시 들어있는)
    (tasks라는 배열을 만들어서 적은 list를 전부 넣어놓는다)

  3. +버튼 누르면 모달창이 나오고 textField에 List를 작성한다.
    (취소버튼도 왼쪽에 놔두고 취소 누르면 모달창 자연스럽게 사라지게)

  4. 모달 창 안에 '등록' 버튼 누르면 테이블에 보여지게 하기!

  5. 어플을 종료해서 localDB안에 저장되어서 나중에도 볼 수 있게 하기

  6. Edit버튼 누르면 편집 가능 그리고 List옆으로 밀면 삭제 가능하게!!

  7. 추가적으로 테이블내에서 List 자유롭게 위아래로 이동 가능하게 !!

설명 -> 스토리보드

스토리보드는 최소한으로 쓰자!
네비게이션만 사용해서 edit을 할때 편집화면으로 가게끔 해준다!

cell을 코드에서 생성할거니까 스토리보드에서 Cell의 identifier만 설정! + style은 Basic으로!

테이블은 스토리보드에서 생성!!

설명 -> 코드

가장 기본이자 중요한 거는 일단 적을 수 있어야한다!!!!

  1. Task라는 구조체를 만들어서 Cell안에 들어갈 정보를 묶는다.

  2. 전체 Task를 가지고 있는 Tasks라는 배열을 따로 놔둔다

var tasks = [Task]() {
	didSet {
    	self.saveTasks() // 이 부분은 task를 UserDefaults안에 저장!
    }
}
  1. tapAddButton()를 Action으로 연결해서 + 눌리면 모달 창 나오게!!
    중요한거 몇개만 적어놓으려고 한다
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 둘 중 무엇을 선택해야할지}

리팩토링할 부분

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글