28일차 - 21.07.05

6960 단어 100day100day

학습키워드

  • UITextChecker
  • inserting table view rows with animation

1. Prepare for submission: lowercased() and IndexPath

submit() 메서드로 단어를 제출한 경우 배열에 추가합니다. 추가 한 다음 행을 삽입하기 위해서 테이블뷰의 reloadData() 메서드를 사용하여 테이블뷰 전체를 로드하는 방법이 있지만 한 행만 추가하는 경우에는 insertRows() 를 사용합니다.

  • 예제코드

    usedWords.insert(answer, at: 0)
    
    let indexPath = IndexPath(row: 0, section: 0)
    tableView.insertRows(at: [indexPath], with: .automatic)
  • with: 매개변수에는 행이 애니메이션되는 방식을 지정할 수 있습니다.

  • lowercased() : 모든 단어를 소문자로 지정합니다.

2. Checking for valid answers

사용자가 단어를 추가하는 경우 조건

  1. 주어진 글자로 단어로 만들 수 있는지? 확인

    firstIndex(of:) 하위 문자열이 존재하면 첫번째 위치를 반환하고 그렇지않으면 nil을 반환

    remove(at:) : 문자를 제거

  2. 중복된 단어가 있는지? 확인

    배열의 contains() 메서드로 단어가 포함되어 있는지 확인합니다.

  3. 실제로 유효한 영어단어인지? 확인

    func isReal(word: String) -> Bool {
        let checker = UITextChecker()
        let range = NSRange(location: 0, length: word.utf16.count)
        let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")
    
        return misspelledRange.location == NSNotFound
    }
    • UITextChecker : 맞춤법 오류를 발견하도록 설계된 iOS 클래스로, 주어진 단어가 진짜인지 아닌지 확인할 수 있습니다.

    • NSRange : location 시작위치 length 길이를 지정하여 범위를 지정합니다.

    • rangeOfMisspelledWord(in:) : in 문자열, range 스캔할 범위(전체 문자열), startingAt : 텍스트 검사기가 스캔을 시작해야하는 범위의 지점, wrap: 범위의 시작에서 시작해야하는지의 여부 language: 확인해야하는 언어

      → 철자오류가 발견된 위치를 알려주는 NSRange를 반환합니다.

⚠️ UIKit, SpriteKit 또는 기타 Apple 프레임 워크로 작업 할 때 utf16.count를 사용 (이모지같은 경우 2문자로 인식하는 경우가 있기 때문입니다.)

3. Or else what?

철자가 틀린 경우 경고창을 표시합니다.

let errorTitle: String
let errorMessage: String

let ac = UIAlertController(title: errorTitle, message: errorMessage, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
  • 에러가 발생한 부분에 errorTitle, errorMessage 값을 변경하면서 각각 다른 경고창메시지를 보여줍니다.
  • 유효한 응답을 한 경우 return 문을 사용하여 메서드를 즉시 종료할 경우에 사용하기도 합니다.

링크

100 Days of Swift - Day 28 - Hacking with Swift

좋은 웹페이지 즐겨찾기