23.08.28 월

2023. 8. 31. 01:45·Study/🌱 SeSAC

 

💡 레이아웃 코드 분리하기

BaseViewController

BaseViewController를 생성하여 VC에 공통적으로 사용하는 설정 요소들을 작성하고 뷰 컨트롤러들이 상속 받는 형식으로 구성

뷰 객체에 대한 UI나 레이아웃, 토스트 메세지, 얼럿, 임포트 등 뷰컨에서 공통적으로 작성되는 코드를 구조화 함으로써 가독성도 높이고 코드 중복도 줄일 수 있다.

✅ view controller의 레이아웃 코드 분리하기

Untitled.pngUntitled.png

BaseView를 상속받는 AddView → AddViewController의 루트 뷰로 설정할 것

 

Untitled.pngUntitled.png

자기 자신에게 적용하는 것이기 때문에 view는 지워도 된다.

 

 

Untitled.png

AddView 클래스 인스턴스를 생성

mainView를 루트 뷰로 교체를 해줘야 한다.

 

💡 RootView - loadView()

Untitled.png

  • view controller의 루트 뷰를 custom view로 교체하여 루트 뷰 위에서 동작하는 뷰들의 레이아웃을 UIVIew에서 책임지게 설정하는 방법
  • viewDidLoad보다 먼저 호출되는 루트 뷰를 호출하는 메서드
  • 루트 뷰에 관련된 요소들이 loadView에서 설정된다.
  • super 메서드 호출하면 안된다. 커스텀 메서드를 사용하는 것이기 때문에 super 메서드를 사용하면 안된다. → 공식 문서에도 명시 되어 있음

Untitled.pngUntitled.png


Untitled.png

collectionView를 인스턴스만 생성해도 컴파일 시 오류가 나지는 않는다.

 

Untitled.png

⇒ collectionView는 flowLayout이 필요하기 때문에 런타임 오류가 발생한다.

 

Untitled.png

flowLayout 설정한 후에도 런타임 오류가 발생한다!

 

Untitled.png

collectionView는 프레임에 대한 초기화가 필요하다.

 

Untitled.png

레이아웃을 .zero로 초기화한 후 레이아웃 지정을 하게 되어서 음수 값이 발생해 오류가 발생한다.

 

Untitled.png


 

💡 Pass Data between View Controllers

계층 구조와 상관없이 역으로 값을 전달할 수 있는 방법

  • property
  • closure
  • notification
  • delegate pattern

 

💡 Notification

A → B → C ⇒ C에서 변경한 데이터 A, B에 반영

한 화면에서 설정한 값을 다른 화면에도 적용해야 한다.

ex) 다마고치 닉네임 설정 후 모든 화면에 바뀐 닉네임 적용..

post → signal ( signal name)

“Name”이라는 signal을 addObserver

화면 전환 시 계층에 대한 구조와 상관 없이 신호를 주고 받으며 값 전달을 할 수 있다.

 

✅ 신호 보내기 NotificationCenter.default.post()

Untitled.pngUntitled.pngUntitled.png

name, sample 값을 SelectImage라는 이름을 가진 신호를 통해 post

✅ 보낸 신호 받기 addObserver

Untitled.png

addObserver는 신호만 받는다! 이후 데이터 처리는 알아서~

Untitled.png

addObserver를 통해 name신호를 통해 데이터를 받아 selector 메서드로 해당 데이터에 대한 처리를 진행한다.

 

✅ 받은 신호에서 userInfo 꺼내오기

Untitled.pngUntitled.png

userinfo의 키 값이 없을 수 있기 때문에 옵셔널 처리를 해야한다.

 

Untitled.png

받은 값의 타입을 알 수 없다 → Any타입으로 넘어오기 때문에

 

 

if let 구문을 통해 값이 잘 전달되어 왔다면 타입 캐스팅

Untitled.png

🚨 Notification을 이용한 정방향 값 전달

addObserver는 미리 등록이 되어 있어야 신호를 받을 수 있다. 하지만 정방향 전달은 계층 구조 상 observer 등록 이전에 post를 하게 된다. Observer가 등록되기 전에 Post가 된다면 신호를 못받는다.

➡️ 때문에 Notification은 정방향 전환에서는 사용하지 않고 역방향 전환 시 주로 사용한다.

post의 순서와 addObserver의 순서가 중요함!

'Study > 🌱 SeSAC' 카테고리의 다른 글

23.08.30 수  (0) 2023.09.01
23.08.29 화  (0) 2023.08.31
23.08.25 금  (1) 2023.08.31
23.08.24 목  (1) 2023.08.31
23.08.23 수  (2) 2023.08.31
'Study/🌱 SeSAC' 카테고리의 다른 글
  • 23.08.30 수
  • 23.08.29 화
  • 23.08.25 금
  • 23.08.24 목
김졀니
김졀니
🍎 iOS 개발
  • 김졀니
    졀니의 개발 공부✨
    김졀니
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • UIKit&SwiftUI
        • RxSwift&Combine
        • WWDC
      • Study
        • 🚨 TroubleShooting
        • 🌱 SeSAC
  • 블로그 메뉴

    • 홈
    • Github
  • 인기 글

  • 최근 글

  • 태그

    이미지 캐싱
    mapkit
    Sendable
    위치 권한
    ios
    의존성 주입
    Drawing Cycle
    CLLocation
    swift concurrency
    clipstobounds
    mainactor
    concurrency
    actor
    displayPriority
    RxSwift
    @PropertyWrapper
    FileManager
    ReactorKit
    traits
    observable
    Swift
    kingfisher header
    OperationQueue
    layoutIfNeeded
    pointfree
    wwdc23
    동시성프로그래밍
    swiftdata
    인앱리뷰
    Realm
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
김졀니
23.08.28 월
상단으로

티스토리툴바