Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 애니메이션
- 리펙토링
- 리팩토링
- 리펙터링
- collectionview
- tableView
- rxswift
- Clean Code
- combine
- map
- Human interface guide
- UITextView
- HIG
- 클린 코드
- ribs
- Observable
- uitableview
- MVVM
- Refactoring
- Xcode
- ios
- 스위프트
- uiscrollview
- swift documentation
- Protocol
- UICollectionView
- SWIFT
- clean architecture
- RxCocoa
- swiftUI
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] UITextChecker 개념 (오타검사, 자동완성) 본문
UITextChecker 개념
- 교정기능을 제공하는 클래스
- 오타 검사
- 자동완성 및 제안 기능
UITextChecker 오타 검사
- 오타가 있는 mountein 문자열 준비 (mountain으로 잘 교정되는지 확인을 위함)
let str = "mountein"
- UITextChecker 인스턴스 생성
let textChecker = UITextChecker()
- rangeOfMisspelledWord(in:range:startingAt:wrap:language:) 메소드를 사용
- language 값에는 언어코드가 들어가는데, 이 언어코드는 iSO 639-1가 사용
- ex) 영어면 en_US, 한국어면 ko
- ISO 639-1 언어코드표
- language 값에는 언어코드가 들어가는데, 이 언어코드는 iSO 639-1가 사용
- 이 언어코드는 Locale로 접근하여 획득도 가능
Locale.current.identifier // en_US
- 이 메소드를 사용하여 오타가 난 지점의 range를 획득
let misspelledRange = textChecker.rangeOfMisspelledWord(
in: str,
range: NSRange(
0..<str.utf16.count
),
startingAt: 0,
wrap: false,
language: "en_US"
)
- checker의 guesses(forWordRange:in:language:) 메소드를 사용하여 오타를 교정해준 단어들을 생성
guard
misspelledRange.location != NSNotFound,
let guesses = textChecker.guesses(
forWordRange: misspelledRange,
in: str,
language: "en_US"
)
else {
print("Not found")
return
}
print("guesss:", guesses) // ["mountain"]
UITextChecker 새로운 단어 학습시키기
- 정적 메소드인 learnWord()를 사용하면 학습시키기가 가능
UITextChecker.learnWord(str)
- 이 다음 아래 메소드를 실행시키면 오타난 곳이 없는것으로 출력
- learnWord는 UserDefault와 같이 디스크에 저장되고, 앱을 삭제하기 전까지는 앱을 다시 실행해도 계속 저장됨
let misspelledRange = textChecker.rangeOfMisspelledWord(
in: str,
range: NSRange(
0..<str.utf16.count
),
startingAt: 0,
wrap: false,
language: "en_US"
)
print(misspelledRange.location == NSNotFound) // true
UITextChecker 자동완성
- checker의 completions(forPartialWordRange:in:language:)를 사용하면 자동완성된 문자열 추출이 가능
let partial = "mounta"
let completions = textChecker
.completions(
forPartialWordRange: NSRange(
0..<partial.utf16.count
),
in: partial,
language: "en_US"
)
print(completions)
/*
Optional(["mountain", "mountains", "mountaineering", "mountaineer", "mountainside", "mountaintop", "mountainous", "mountain\'s", "mountainsides", "mountaintops", "mountable", "mountainboarding", "mountainside\'s", "mountainboarding\'s", "mountaintop\'s", "mountaineering\'s", "mountaineer\'s", "mountaineers"])
*/
* 전체 코드: https://github.com/JK0369/ExTextChecker
* 참고
https://developer.apple.com/documentation/uikit/uitextchecker/1621028-learnword
https://developer.apple.com/documentation/uikit/uitextchecker/1621029-rangeofmisspelledword
https://ko.wikipedia.org/wiki/ISO_639-1_%EC%BD%94%EB%93%9C_%EB%AA%A9%EB%A1%9D
https://nshipster.com/uitextchecker/
https://developer.apple.com/documentation/uikit/uitextchecker
'iOS 응용 (swift)' 카테고리의 다른 글
Comments