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 | 31 |
Tags
- rxswift
- swift documentation
- uitableview
- Protocol
- ribs
- 리펙터링
- SWIFT
- Observable
- Human interface guide
- UICollectionView
- HIG
- uiscrollview
- ios
- combine
- RxCocoa
- 리팩토링
- clean architecture
- tableView
- 스위프트
- Clean Code
- collectionview
- 클린 코드
- swiftUI
- Refactoring
- UITextView
- Xcode
- 리펙토링
- map
- 애니메이션
- MVVM
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 숫자로 이루어진 문자열인지 판별하는 방법 (CharacterSet, regularExpression, +benchmark) 본문
iOS 응용 (swift)
[iOS - swift] 숫자로 이루어진 문자열인지 판별하는 방법 (CharacterSet, regularExpression, +benchmark)
jake-kim 2023. 9. 15. 01:03숫자로 이루어진 문자열 판별
- 목표 - isNumber이라는 String의 extension으로 computed property를 정의하는 것
"123".isNumber // true
"123.456".isNumber // false
- CharacterSet을 이용한 방법
extension String {
var isNumberByCharacterSet: Bool {
let digitsCharacters = CharacterSet(charactersIn: "0123456789")
return CharacterSet(charactersIn: self).isSubset(of: digitsCharacters)
}
}
- regularExpression을 이용한 방법
extension String {
var isNumberByRegularExpression: Bool {
range(
of: "^[0-9]*$",
options: .regularExpression
) != nil
}
}
(사용)
print("123".isNumberByCharacterSet) // true
print("123.456".isNumberByCharacterSet) // false
print("123".isNumberByRegularExpression) // true
print("123.456".isNumberByRegularExpression) // fales
- 이 둘중에 더욱 속도가 빠른 것을 benchmark를 통해 아래에서 계속 알아보기
benchmark 준비
- benchmark 오픈소스 swift-benchmark 사용
- 이 오픈소스 까보면서 어떤 오픈소스인지 분석한 것은 이전 포스팅 글 참고
- SPM으로 추가: https://github.com/google/swift-benchmark
- Xcode > Edit Scheme > Build Configuration을 Release로 설정 > Debug excutable 체크 해제
- 빌드하여 벤치마크 결과 확인
running isNumberByCharacterSet... done! (117507.45 ms)
running isNumberByRegularExpression... done! (65138.43 ms)
name time std iterations
--------------------------------------------------------------------
isNumberByCharacterSet 39267593708.000 ns ± 0.01 % 2
isNumberByRegularExpression 21725841500.500 ns ± 0.72 % 2
결과
- 문자열로된 숫자를 판별할 때 ChracterSet을 사용한 것보다 regularExpression을 사용하는 방식이 더욱 효율적이므로 regularExpression을 사용할 것
extension String {
var isNumberByRegularExpression: Bool {
range(
of: "^[0-9]*$",
options: .regularExpression
) != nil
}
}
* 전체 코드: https://github.com/JK0369/ExCheckNumber
* 참고
https://sarunw.com/posts/how-to-check-if-string-is-number-in-swift/
'iOS 응용 (swift)' 카테고리의 다른 글
Comments