관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] MVVM패턴을 이용하여 toggle 로직 구현 본문

iOS 실전 (swift)

[iOS - swift] MVVM패턴을 이용하여 toggle 로직 구현

jake-kim 2020. 11. 1. 22:18

MVVM에서 RxSwift와 computed property 활용한 방법

  • 안좋은 방법의 예시
    • ViewModel에서 UIKit접근하는 형태
    • toogle변수를 아래와같이 따로 두지 않고, BehaviorRelay하나로 해결가능
// View Model
	
	let updateImage = PublishRelay<(apple: UIImage, banana: UIImage)>()

	var selectedAppleButton: Bool = true {
          willSet(newValue) {
              if newValue {
                  updateImage.setImage(UIImage(named: "slectpoint"), for: .normal)
              } else {
                  updateImage.setImage(UIImage(named: "slectedpoint"), for: .normal)
              }

          }
    	}
    
      func toggle() {
          selectedAppleButton.toggle()
      }
// View Controller

// toggle실행
viewModel.toggle()

// output bindidng
viewModel.updateImage()
	.bind(onNext: { [weak self] (apple, banana) in
    		buttonApple.setImage(apple)
   		buttonBanana.setImage(banana)
	}).disposed(by: bag)

BehaviorRelay를 활용한 방법

  • 가장 좋은 방법
    • let toggleInfo = BehaviorRelay<Bool>(value: true)를 사용하면, toggle정보가 필요할 때, toggleInfo.value로 값에 접근 가능
// View Model
	
    let updateImage = BehabiorRelay<(apple: String, banana: String)>()

	var selectedAppleButton: Bool = true {
          willSet(newValue) {
              if newValue {
                  updateImage.accept("slectpoint")
              } else {
                  updateImage.accept("slectedpoint")
              }

          }
    	}
    
      func toggle() {
          selectedAppleButton.toggle()
      }

 

Comments