Skip to content

Conversation

@kingjeongkong
Copy link
Contributor

🌱 작업한 내용

  • NickName 버튼 클릭 시 Combine으로 전달

🌱 PR Point

다음과 같이 PassthroughSubject를 활용하여 데이터 전달에 사용함.

final class CreateNickNameViewModel {
    
    let nickNameSubject = PassthroughSubject<String, Never>()
    
    func setNickName(_ nickName: String) {
        nickNameSubject.send(nickName)
    }
}

다음과 같이 ViewController에서 구독하여 사용함

//LoginViewController

let nickNameViewModel = CreateNickNameViewModel()
private var subsscriptions = Set<AnyCancellable>()

nickNameViewModel.nickNameSubject
            .receive(on: RunLoop.main)
            .sink { [weak self] nickName in
                guard let self else { return }
                self.loginView.combineLabel.text = nickName
            }
            .store(in: &subsscriptions)

 @objc private func showModalView() {
        let createNickNameVC = CreateNickNameViewController(viewModel: nickNameViewModel)
        
        if let sheet = createNickNameVC.sheetPresentationController {
            sheet.detents = [.medium(), .large()]
        }
        
        self.present(createNickNameVC, animated: true)
    }

처음에는 다음의 첫번째 코드와 같이 viewModel를 선언해서 구현했지만 dataBind가 제대로 이루어지지 않음. 이유는 LoginViewController이랑 CreateNickNameViewController에서 생성되는 CreateNickNameViewModel 객체가 달라서 제대로 데이터 전달이 안된 것임.
따라서 CreateNickNameViewController를 객체로 선언할 때 CreateNickNameViewModel도 같이 초기화할 수 있게 해줌.

//CreateNickNameViewController

// private let viewModel = CreateNickNameViewModel()
private let viewModel: CreateNickNameViewModel?

init(viewModel: CreateNickNameViewModel?) {
        self.viewModel = viewModel
        super.init(nibName: nil, bundle: nil)
    }

@objc private func tappedSaveButton() {
        let nickName = createNickNameView.nickNameTextField.text!
//        dataBind?(nickName)
        viewModel?.setNickName(nickName)
        dismiss(animated: true)
    }

📸 스크린샷

Simulator Screen Recording - iPhone 15 Pro - 2024-05-31 at 03 21 42

@kingjeongkong kingjeongkong requested a review from thingineeer May 30, 2024 18:38
@kingjeongkong kingjeongkong self-assigned this May 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants