deprecated/가족 메신저(project-ios)

[RxSwift] Textfield maxLength

lgvv 2021. 9. 4. 11:39

✅ 이번 시간에는 rx를 이용하여 텍스트 필드의 최대 글자 길이를 정하는 방법에 대해서 알아볼 예정이야.

실제 구현한 이미지.

저기 보면 년,월,일의 경우에는 글자 길이를 제한할 필요가 있어.

예를 들면, 년도의 경우 아주 상식적인 범위에서 4글자라던가, 월,일,시,분은 최대 2글자 까지만 가질 수 있지.

그럼 이걸 어떻게 제한할 수 있을까? rx를 이용하여!

 

✅ 글자 길이를 제한하는 방법

 

1️⃣ 글자 길이를 제한하는 함수를 작성한다.

   private func HourTextField2(_ str : String) { // 시간 최대 2자리까지
        
        if str.count > 2 {
            let index = str.index(str.startIndex, offsetBy: 2)
            self.HourTextField.text = String(str[..<index])
        } 
        
    }

 

2️⃣ 해당 텍스트필드가 구독한다.

       MonthTextField.rx.text.orEmpty
            .skip(1)
            .observe(on: MainScheduler.asyncInstance)
            .subscribe(onNext: {
                self.MonthTextField2($0)
            })
            .disposed(by: bag)

⭐️❗️ 여기 코드를 조금 주의깊게 봐야한다. 

 - orEmpty : 텍스트필드 입력시 optional 형태로 방출되는데, 이 코드를 통해 옵셔널을 해제하여 방출할 수 있다.

 - skip(1) : 우리가 텍스트 필드를 터치해서 입력을 하는 시점부터 코드가 작동해야 하는데, 코드가 처음 실행할 때, 구독하면서 1회 실행이 발생한다. 이건 우리가 원한 작업이 아니므로 스킵을 통해 한번을 날려주어야 한다.

 - observe(on : MainScheduler.asyncInstance) : 이 코드는 상당히 중요하다. 이 코드가 없으면 발생하는 문제로는 앱이 크래시되어 종료되는 것을 확인할 수 있다. 

스케줄러에 대해서 좀 깊은 이해가 필요했는데, 아래 자료를 참고하도록 하자.

발생하는 오류 코드에 대해서는 따로 포스팅을 진행할 예정이다.

https://stackoverflow.com/questions/58332584/rxswift-mainscheduler-instance-vs-mainscheduler-asyncinstance

 

RxSwift -- MainScheduler.instance vs MainScheduler.asyncInstance

What is the difference between using RxSwift's MainSchedule.instance and MainSchedule.asyncInstance within the context of observeOn?

stackoverflow.com

 - subscribe : 구독하고 있어서 함수에 $0를 통해 전달한다.

 

특별히 어려운 점은 없다! 그럼 이슈 포스팅이 나오면 추가하도록 할게

 

 

✅ 추가 발생하는 오류 코드에 대한 포스팅

2021.09.04 - [분류 전체보기] - [RxSwift] Reentrancy anomaly was detected. Error 대응

 

[RxSwift] Reentrancy anomaly was detected. Error 대응

✅ 이번 시간에는 rxswift를 사용하다가 만난 에러에 대해서 알아볼 예정이야 이런 에러를 만난 상황은 rxSwift를 적용하여 텍스트필드의 글자의 최대 길이를 정해줄때 발생했어. ✅ 앞의 포스팅을

rldd.tistory.com