최초로 만드는 iOS 앱으로 TodoList(할일) 앱을 만들어보고자 한다.
우선 만들기 전에, 강의에서 필요로 하는 개념에 대한 정리를 해보고자 한다.
* 데이터 저장
: NSCoding, Property List, Serialization, Core Data, Realm
- 데이터가 많을 때
: Core Data, Realm 권장
- Codable(Swift 4) : JSON 데이터를 효율적으로 다룰 때 사용
* Tab Controller 추가 방법
: StroyBorard에서 View 선택 및 Editor -> Embed in -> Tab Controller 선택
* 할일을 추가/수정/삭제하는 클래스(TodoManager)에 대한 함수를 정의해보자.
// 여러개의 TodoList 목록을 관리 (TodoManager)
class TodoManager {
static let shared = TodoManager() // Singleton 객체 형태
static var lastId: Int = 0
var todos: [Todo] = []
func createTodo(detail: String, isToday: Bool) -> Todo {
// [x] TODO: create로직 추가
let nextId = TodoManager.lastId + 1
TodoManager.lastId = nextId
return Todo(id: nextId, isDone: false, detail: detail, isToday: isToday)
}
func addTodo(_ todo: Todo) {
// [x] TODO: add로직 추가
todos.append(todo)
saveTodo()
}
func deleteTodo(_ todo: Todo) {
//TODO: delete 로직 추가
// 방법1 (간단히 표현)
todos = todos.filter{ $0.id != todo.id }
// 방법1 (filter를 활용하여 기존의 TodoList와 신규생성한 TodoList 목록 비교)
/*
todos = todos.filter { existingTodo in
return existingTodo.id != todo.id
}
*/
// 방법2 (효율적)
/*
if let index = todos.firstIndex(of: todo) {
todos.remove(at: index)
}
*/
saveTodo()
}
func updateTodo(_ todo: Todo) {
//TODO: updatee 로직 추가
guard let index = todos.firstIndex(of: todo) else { return }
todos[index].update(isDone: todo.isDone, detail: todo.detail, isToday: todo.isToday)
saveTodo()
}
func saveTodo() {
Storage.store(todos, to: .documents, as: "todos.json")
}
func retrieveTodo() {
todos = Storage.retrive("todos.json", from: .documents, as: [Todo].self) ?? []
let lastId = todos.last?.id ?? 0
TodoManager.lastId = lastId
}
}
<앱 초안 이미지>
'iOS' 카테고리의 다른 글
[22일차] InputText 와 소프트 키보드 영역 (0) | 2020.08.11 |
---|---|
[21일차] Codable 이란? (0) | 2020.08.10 |
[19일차] Designated Init vs. Convenience Init (0) | 2020.08.07 |
[18일차] Class 생성자 이해하기 (2-phase Initialization) (0) | 2020.08.07 |
[17일차] Class와 Struct를 사용해야 할 때 (0) | 2020.08.05 |
댓글