iOS 개발일지
0823 새싹 36회차 정리 본문
iOS 앱 개발자 데뷔 과정 36회차
#0. Memo
- Property Observer 를 활용한 reloadData
#1. Checklist
- Realm Update
SwipeActionsConfigurationForRowAt 메서드를 통해 Realm 데이터를 업데이트 할 수 있다.
- Realm Filter, Sort
Filter : https://www.mongodb.com/docs/realm/sdk/swift/crud/filter-data/#operators-1 참고
Sort : https://www.mongodb.com/docs/realm/sdk/swift/crud/read/#sort-query-results 참고
필터는 위처럼 활용할 수 있는데, 검색하고자 하는 String 값은 작은 따옴표로 감싸줘야 한다.
[c]는 캐피탈 여부로, CONTAINS 뒤에 작성하여 대소문자 관계 없이 검색할 수 있게 한다.
- ErrorHandling
- Error Protocol
1. Error 프로토콜을 채택하여 enum에는 오류의 큰 종류를, case에는 세부 항목을 작성해 정의한다.
- do try catch
2. 발생한 오류를 throws를 이용해 던진다. = 오류를 처리하는 곳으로 전달한다.
3. try와 와 do-catch를 이용해 오류를 처리한다.
- Optional try
에러가 발생할 경우 nil, 에러가 발생하지 않을 경우 옵셔널 타입을 반환한다.
- do try catch VS if else
if else로도 에러처리를 할 수 있는데, try catch와 뭐가 다른걸까?
try 에서 예외가 발생하면 그 즉시 해당 블럭이 종료되고 catch 블럭으로 제어가 이동된다.
try는 '블럭' 이고, if else는 '구문'이기 때문에 발생하는 차이이다.
if else로 에러를 처리하게 되면, 에러가 발생한 객체에 대해 수명이 유지되기 때문에 에러를 처리하는 동안에도 에러가 발생한 객체를 참조하는 코드가 정상적으로 컴파일된다.
하지만 try catch를 사용하면 예외를 발생시킴과 동시에 try 블럭 안의 모든 객체는 스코프를 벗어나 참조할 수 없게 되므로, 예외를 처리하는 동안 try 블럭 안에서 예외를 발생시켰을 수 있는 객체의 참조를 원천적으로 막아 더 안전하고 깔끔한 예외처리를 할 수 있다.
- lazy var VS let (feat. closure)
UIView 객체에 대한 인스턴스는 보통 let으로 선언한다.
하지만 viewDidLoad에서의 delegate, dataSource 등의 코드를 이 클로저 내부에 작성하면 아래와 같은 에러가 발생한다.
클로저 뒤에 ()가 붙어있기 때문에 즉시 실행되는데, 아직 초기화 되기 전이라 사용할 수 없는 것이다.
이럴땐 지연 저장 프로퍼티를 활용해 초기화 시점을 늦춤으로써 해결할 수 있다.
스택뷰 내에 객체를 바로 등록하고 싶을 때도 활용이 가능하다.
- Meta Type
Meta Type은 타입 자체를 가리키는, 타입의 타입이다.
특정 타입의 인스턴스를 저장하거나 사용하는 것이 아닌 타입 그 자체를 저장할 수 있다는 것을 의미한다.
#2. Assignment
- ShoppingList Realm Database
- UIMenu를 사용해 할일 기준 정렬, 즐겨찾기순 정렬, 제목순 정렬 구현
- 검색 화면에서 셀을 선택했을 경우 상세 페이지로 전환하여 Realm의 데이터를 상세 페이지로 전달
UIMenu 구현에 관한 코드는 게시글 맨 마지막에 작성했고, 데이터 전달 코드는 아래와 같이 구현했다.
- Diary App UI 개선
- 다이어리 메인 화면 구현, 일기 작성 화면 취소/저장 버튼 구현
# 그 외
- UIMenu
위와 같은 형태의 메뉴창을 UIMenu라고 하며, 구현하는 방법은 크게 어렵지 않다.
다만 iOS 14 이상부터 지원하기
때문에 실제로 사용하려면 조건문을 통한 버전 대응이 필요할 것 같다.
UIButton에서 구현하면 꾹 눌러야 메뉴가 나오게 된다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0825 새싹 38회차 정리 - 백업/복구 (feat. UIDocumentPickerViewController) (0) | 2022.08.25 |
---|---|
0824 새싹 37회차 정리 (0) | 2022.08.24 |
0822 새싹 35회차 정리 - Realm (0) | 2022.08.23 |
0821 새싹 7주차 마무리 (0) | 2022.08.21 |
0819 새싹 34회차 정리 - NSNotification (0) | 2022.08.19 |