Overview

프로젝트 인원 및 개발 파트

  • 2명
  • 앱 내 기능인 챗봇 SDK를 팀에서 개발했으며, 챗봇 기능 안에서 추천 상품을 제시하고 선택하는 화면과 채팅 내역을 검색하는 기능을 맡아서 개발했습니다.

프로젝트 기간

  • 2018.03 ~ 2018.03

배운 점

  • 델리게이트 패턴
  • NSAttributedString, NSRange, NSString

어려웠던 점

  • 요구사항 로직 구현
    • 문장에서 강조하고자 하는 단어를 찾아 볼드, 색상 변경 등의 특수효과를 주는 기능을 개발하는게 어려웠다. iOS Framework에서 기본적으로 제공되는 메서드는 문장 중에 일치하는 만나게되면 종료하게 되어 전체 문장을 계속 검색할 수 없었다. NSRange를 통해서 검색했던 문장은 제외하는 로직으로 해결할 수 있었다.
extension String {

    /// 문자열에서 특정 단어를 원하는 효과를 주어 `NSMutableAttributedString`으로 반환
    ///
    /// - parameters:
    ///     - willAttributedStringAndValues: 원하는 단어: [원하는 효과]
    ///     - isLoop: 문장 전체를 반복할지 여부
    /// - returns: 변환된 NSMutableAttributedString
    func addAttributedString(willAttributedStringAndValues: [String: [NSAttributedString.Key: Any]], isLoop: Bool = false) -> NSMutableAttributedString {
        let attributedString = NSMutableAttributedString(string: self)
        
        willAttributedStringAndValues.forEach {
            if isLoop { // 모든 문장 검색
                var range = NSMakeRange(0, attributedString.length)
                while range.location <= attributedString.length {
                    range = (attributedString.mutableString as NSString).range(of: $0.key, options: [], range: range)
                    if range.location <= attributedString.length {
                        attributedString.addAttributes($0.value, range: range)
                        range = NSMakeRange(range.location + $0.key.count, attributedString.length - (range.location + $0.key.count))
                    }
                }
            } else { // 처음 일치하는 단어까지만 검색
                let range = (self as NSString).range(of: $0.key)
                attributedString.addAttributes($0.value, range: range)
            }
        }
        
        return attributedString
    }

}