LocalizedError
- 오류에 대한 발생 이유를 설명하는 프로토콜
- 해당 프로토콜을 준수하고 연산프로퍼티
errorDescription: String?
를 정의하면 .localiedDescription
사용이 가능
localizedDescription
: error의 코멘트 역할
- 예시:
enum JuiceMakingError: Error {
case outOfStock
}
extension JuiceMakingError: LocalizedError {
var errorDescription: String? {
switch self {
case .outOfStock:
return "과일재고가 부족해서 제조 불가"
}
}
}
print(error.localizedDescription)
화면전환방식
present 방식 : ViewController가 다른 ViewController 호출(present)
- 다른 ViewController를 Modal로 띄움
- UIViewController에 정의된 present 메서드 사용
- 자동으로 돌아올 수 없기 때문에 돌아올 때 dismiss를 해줘야한다! // presentingViewController?.dismiss(animated:)
- 단점: 화면을 덮기 때문에 여러개일 경우 메모리 풀 가능성 있음
- modalTransitionStyle: 화면 전환시 어떤방식으로 넘어갈거냐
- coverVertical 밑에서부터 쭈욱 올라옴
- crossDissolve 화면이 크로스 되면서 생김 (원래있던 화면이 뒤로 스윽 가지는??)
- partialCurl 페이지를 넘기듯이 넘어감 (fullScreen일 때만 가능)
- flipHorizontal 카드를 뒤집듯이 뒤집히면서 나옴
잘 안쓰는 방법이라고 한다😅;;;
Navigation Controller + 소스(push)
- Navigation Controller: 계층적 내용을 탐색하기 위한 스택 기반 체계를 정의하는 컨테이너 뷰 컨트롤러
- NavigationController 사용하여 화면전환
- NavigationController는 back버튼이 자동으로 생겨서 좋다!
- Navigation Stack에 쌓임
- 이 방법으로 화면전환을 하려면 먼저 Navigation Controller를 embed in해줘야함
- 해당하는 View controller를 누르고 embed in(오른쪽 아래 resolve auto layout issues 옆에서 누르거나, Editor를 통해 하는 방법도 있다)
NavigationController: 디자인과 관련된 부분x 기능과 관련된 부분
NavigationController가 처음으로 만나는 ViewController를 root ViewController라고한다
네비게이션 컨트롤러 + Segue
- 가장 편한 방법?? 스토리보드에서 연결해주면 끝이다;;;
- 코드를 사용해 연결 하는 방법:
- ViewController에서 새로운 화면으로 세그 연결
- Inspector에서 segue의 식별자인 Identifier를 설정
- 연결을 완료했으면 ViewController.swift로 넘어와 버튼의 액션에 새로운 코드를 추가
- performSegue(withIdentifier: "showSegue", sender: sender)라는 코드를 추가, 이것은 세그를 실행하는다는 의미, 매개변수로 식별자와 전달자인 버튼을 넣으면 된다