inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

아키텍처 패턴 with iOS - GUI Architecture Patterns(이론)

MVVM 템플릿 2

MVVM 템플릿2 관련

해결된 질문

471

이준복

작성한 질문수 3

0

강의를 여러번 다시 들으니 MVVM에 대해 조금 더 이해하게 된것 같습니다.

다만 강의를 여러번 다시 들었는데도 응용하기가 조금 어려워서 질문드립니다.

PostViewController와 PostViewModel 처럼 뷰컨트롤러나 하위뷰 들도 그저 내용만 표시하는것이라면 강의내용을 따라서 잘 응용하고있습니다.

하지만 하위 뷰들에서 input과 output이 추가된다면 어떻게 응용해야할지 잘 모르겠습니다.

예를 들어 예제의 PostTableViewCell 에서는 titleLabel과 detailsLabel 밖에 없지만 PostTableViewCell에 textFeild와 같은 input이 추가되고 셀에서 입력한것이 상위뷰인 PostViewController에 표시된다고 했을 때

제가 생각했을 때는 PostTableViewCell에서 상위뷰로 데이터를 전달하려면 PostViewModel을 알아야할것 같은데 제가 생각하기엔 이렇게 하는 방법밖에 없는것 같은데

final class PostsViewModel: ViewModelType {
    ...
    let postTableViewCellInput = PublishSubject<String>()
    ...
}
 final class PostTableViewCell: UITableViewCell {
    ...
    @IBOutlet weak var textField: UITextField
    
    func bind(_ viewModel: PostsViewModel) {
        viewModel.postTableViewCellInput
            .bind(to: textField.rx.text)
            .disposed(by: disposeBag)
    }
}

이렇게 코드를 짜면 PostTableViewCell이 상위 뷰모델을 받고 PostsViewModel도 하위 뷰의 데이터를 직접 전달받기 때문에 올바른 방법이 아닌것 같아 PostItemViewModel에 Input Output을 받는것으로 수정해보려 했지만 PostItemViewModel의 Intput output을 어떻게 설정해야 PostViewModel에서 하위뷰에서 입력한 데이터를 상위뷰에서 사용할 수 있을지 감이 안잡혀서 질문드립니다

ios mvc 아키텍처 mvvm mvp

답변 1

0

배언수

iOS에서 일반적으로 하위뷰에서 상위뷰로 데이터를 전달할 때는 Delegate 패턴을 사용합니다.

  1. PostsViewController에 PostTableViewCellDelegate 프로토콜을 만들어 뷰 간에 처리할 작업을 함수로 명시하고(ex. did~ 처리할 작업을 잘 나타내는 함수명으로 지으시면 됩니다)

  2. PostsViewController가 이 프로토콜을 구현하도록 만들고

  3. PostTableViewCell에 delegate라는 프로퍼티를 PostTableViewCellDelegate 타입으로 만든 뒤

  4. PostsViewController에서 PostTableViewCell을 생성할 때 PostTableViewCell이 가진 delegate 프로퍼티에 자신의 참조(self)를 넘겨주고

  5. PostTableViewCell에서 어떤 입력이 발생했을 때 delegate의 메서드를 사용해서 동기화하면 되지 않을까 합니다.

이렇게하면 하위뷰인 PostTableViewCell이 상위뷰인 PostsViewController를 직접 참조하거나 상위뷰의 뷰모델인 PostsViewModel을 알지 않아도 됩니다. 그리고 의존관계를 쉽게 관리하려면 하나의 뷰모델은 하나의 뷰 컨트롤러에서만 의존하도록 만드는 것이 좋습니다.

0

이준복

감사합니다!

Lock 해제 문의 드립니다.

0

21

2

mvc 패턴 - 적용 강의에서 회원가입할 때 redirect가 아닌 forward인 이유가 궁금합니다.

0

17

1

강의 일정 및 수업 자료 공유 관련 문의드립니다!

0

23

1

레디스로 대기큐 구현 질문

0

56

2

API LIMIT

0

45

1

캐시 무효화

0

33

2

Redis와 Kafca의 Pub/Sub 차이

0

48

2

스크립트를 한번에 복사하고 싶습니다.

0

37

2

인텔리제이 오류

0

47

1

android crud중 c 영상이 12초만 있는 잘린 영상이에요.

0

45

2

설정 정보 없이 임베디드 데이터베이스 생성

0

33

1

너무 흥미진진합니다..

1

53

2

SP를 아직도 사용하나요?

0

56

2

캐시전략 - Write-behind

0

47

2

순위가 동률일 때의 처리에 대해 질문드립니다.

0

66

2

Singleton 관련 질문입니다.

1

84

2

servlet과 container에 대한 질문입니다

0

49

1

라우팅 테이블 설정 중 궁금한게 있습니다.

0

50

1

MVVM in iOS - 리액티브 프로그래밍, 자동바인딩과 수동바인딩에서 질문이있습니다

0

307

1

MVC의 본질에 대한 질문

0

380

1

강의자료같은게 따로 있나요 ??

0

479

1

제가 이해한게 맞는지 궁금합니다.

0

750

1

질문 드려요!

0

505

2

질문 올립니다

0

505

1