ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 201230 - TIL
    TIL/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
Designed by Tistory.