본문 바로가기

UIKIT

동일한 조건 분기를 재사용하는 방법

동일한 조건 분기를 재사용하려면 함수로 추출해 코드 중복을 줄일 수 있습니다.

 

extension FeedViewController: UITextViewDelegate {
    
    
    func textViewDidBeginEditing(_ textView: UITextView) {
        
        if textView == feedView.calledTitleTextView() {
            if feedView.calledTitleTextView().textColor == .secondaryLabel {
                feedView.calledTitleTextView().text = ""
                feedView.calledTitleTextView().textColor = .label
            }
        }
        
        if textView == feedView.calledContentTextView() {
            if feedView.calledContentTextView().textColor == .secondaryLabel {
                feedView.calledContentTextView().text = ""
                feedView.calledContentTextView().textColor = .label
            }
        }
    }
    
    func textViewDidEndEditing(_ textView: UITextView) {
        
        if textView == feedView.calledTitleTextView() {
            if feedView.calledTitleTextView().text.isEmpty {
                feedView.calledTitleTextView().text = "제목 쓰기 어렵다면 이모지로 표현해주세요 😉 "
                feedView.calledTitleTextView().textColor = .secondaryLabel
            }
        }
        
        if textView == feedView.calledContentTextView() {
            if feedView.calledContentTextView().text.isEmpty {
                feedView.calledContentTextView().text = "오늘 하루 무슨 일이 있으셨나요? 당신의 하루를 들려주세요 🥰"
                feedView.calledContentTextView().textColor = .secondaryLabel
            }
        }
        
    }
    
    func textViewDidChange(_ textView: UITextView) {
        let maxTitleLength: Int = 20
        
        if textView == feedView.calledTitleTextView() {
            if feedView.calledTitleTextView().text.count > maxTitleLength {
                print("글자 수가 너무 길어요")
            }
        }
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(true)
    }
}

 

 

위의 코드에서 보면 반복적으로 사용되는 부분이 있습니다. 

이를 함수로 처리하여 코드의 가독성을 높입니다. 

 

func resetPlaceholder(for textView: UITextView, placeholder: String) {
    if textView.text.isEmpty {
        textView.text = placeholder
        textView.textColor = .secondaryLabel
    }
}

func clearPlaceholder(for textView: UITextView) {
    if textView.textColor == .secondaryLabel {
        textView.text = ""
        textView.textColor = .label
    }
}

 

 

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView == feedView.calledTitleTextView() {
        clearPlaceholder(for: textView)
    } else if textView == feedView.calledContentTextView() {
        clearPlaceholder(for: textView)
    }
}

func textViewDidEndEditing(_ textView: UITextView) {
    if textView == feedView.calledTitleTextView() {
        resetPlaceholder(for: textView, placeholder: "제목 쓰기 어렵다면 이모지로 표현해주세요 😉 ")
    } else if textView == feedView.calledContentTextView() {
        resetPlaceholder(for: textView, placeholder: "오늘 하루 무슨 일이 있으셨나요? 당신의 하루를 들려주세요 🥰")
    }
}