-
201230 - TILTIL/2021 2020. 12. 31. 04:34
Swift
다시 복습했던 부분은!!
Optional try
- try? try!
defer statement
Result Type
- Error를 처리하는 다른 방식
- 기존 error 처리방식을 완전히 대체하지는 못한다.
- Enum으로 되어있다.
처음 봤을 때는 전혀 이해하지 못했는데 한번 사용을 해봤더니 이번에는 이해가 갔다!!
Assertion
- 디버깅할 때 사용한다.
- 릴리즈 모드에서는 실행되지 않는다.
- assert(_:_:file:line:)과 assertionFailure(_:file:line:)
Precondition
- assertion과 똑같은데 릴리즈 모드에서도 실행된다.
- 아주 특정한 상황에서 앱을 강제 종료해야 한다면 사용하기 좋다.
- -Ounchecked 플래그가 있다면 릴리즈 모드에서도 실행되지 않는다.
iOS
프로젝트를 구현하며 헷갈렸던 부분은
이렇게 되어있는 상황에서 오른쪽 vc에 데이터를 왼쪽 vc로 옮기고 싶었다.
왼쪽 -> 오른쪽으로 옮기는 것은 prepare(for:sender:) 함수를 사용하거나 instantiateViewController(withIdentifier:)를 이용하여 옮길 수 있는데 여기서도 navigationController에 embed되어 있으므로 바로 vc로 다운 캐스팅하면 안되고 navigationController로 다운캐스팅 후에 navigationController의 속성으로 오른쪽 vc 접근한 다음 다운 캐스팅해야 한다.
guard let editingNavigationController = self.storyboard?.instantiateViewController(withIdentifier: "walkRecordEditingNavigationController") as? UINavigationController else { return } guard let editingViewController = editingNavigationController.topViewController as? WalkRecordEditingViewController else { return }
이런 식으로 두 번 통해서!
하지만 오른쪽 -> 왼쪽으로 옮기는 게 문제였다..
navigationController가 가운데 있지 않고 모두를 포함하고 있다면 UINavigationControllerDelegate에 있는 navigationController(_:willShow:animated:) 메서드를 이용하면 parameter로 받는 viewController를 이용하면 옮길 수 있다는 글이 있었는데 이건 그렇게 하지 못했다...
instantiateViewController(withIdentifier:)도 이용해봤지만 이건 새로운 vc를 만드는 거라 데이터가 이전 화면으로 넘어가지 않았다.
그래서 고민 고민하다 생각해낸 방법이 unwindSegue를 이용하는 것!
@IBAction func unwindToWalkRecordEditingVC(_ unwindSegue: UIStoryboardSegue) { } override func canPerformUnwindSegueAction(_ action: Selector, from fromViewController: UIViewController, sender: Any?) -> Bool { return true }
왼쪽 vc에서 이렇게 준비를 해놓고 오른쪽 vc에서 unwindSegue를 연결하면 prepare(for:sender:)를 오른쪽->왼쪽의 상황에서도 사용할 수 있었다!!
흑흑 ㅠㅠ 성공 좋은 방법인지는 모르지만 그래서 성공 ㅠㅠㅠㅠㅠㅠ
728x90'TIL > 2021' 카테고리의 다른 글
211003 - TIL (0) 2021.01.04 201231- TIL (0) 2021.01.01 201228 - TIL (0) 2020.12.29 201226 - TIL (0) 2020.12.27 201225 - TIL (0) 2020.12.26