As mentioned in this post, before Xcode 6 Beta 4, one could use c.isDigit()
and c.isAlpha()
to find if c : Character
was a digit or al
I have create mine var to check whether character is number or not.
var isNumber : Bool {
get{
return !self.isEmpty && self.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
}
}
// Use
var initial = "1"
if let isNum = initial.isNumber, isNum { // true
initial = "#"
}
The "problem" is that a Swift character does not directly correspond to a Unicode code point, but represents an "extended grapheme cluster" which can consist of multiple Unicode scalars. For example
let c : Character = "
With Swift 5, according to your needs, you may choose one of the following ways in order to solve you problem.
Character
's isNumber propertyCharacter has a property called isNumber
. isNumber
has the following declaration:
var isNumber: Bool { get }
A Boolean value indicating whether this character represents a number.
The Playground sample codes below show how to check if a character represents a number using isNumber
:
let character: Character = "9"
print(character.isNumber) // true
let character: Character = "½"
print(character.isNumber) // true
let character: Character = "④"
print(character.isNumber) // true
let character: Character = "1⃣"
print(character.isNumber) // true
let character: Character = "1️⃣"
print(character.isNumber) // true
let character: Character = "৯"
print(character.isNumber) // true
let character: Character = "
According to the great Martin R answer's , for who have problems with the new swift:
replace:
let digits = NSCharacterSet.decimalDigitCharacterSet()
with:
let digits = NSCharacterSet.decimalDigits as NSCharacterSet
Swift 3 seems a little easier:
let str = "abcdef12345"
let digitSet = CharacterSet.decimalDigits
for ch in str.unicodeScalars {
if digitSet.contains(ch) {
// is digit!
}
}
For a single character:
CharacterSet.decimalDigits.contains(string.unicodeScalars.first!)