What is the replacement for isDigit() for characters in Swift?

前端 未结 6 1133
失恋的感觉
失恋的感觉 2020-12-29 03:58

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

相关标签:
6条回答
  • 2020-12-29 04:30

    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 = "#"
    } 
    
    0 讨论(0)
  • 2020-12-29 04:32

    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 = "                                                                    
    0 讨论(0)
  • 2020-12-29 04:37

    With Swift 5, according to your needs, you may choose one of the following ways in order to solve you problem.


    #1. Using Character's isNumber property

    Character 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 = "                                                                    
    0 讨论(0)
  • 2020-12-29 04:41

    About Swift 3:

    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
    
    0 讨论(0)
  • 2020-12-29 04:44

    Swift 3 seems a little easier:

    let str = "abcdef12345"
    let digitSet = CharacterSet.decimalDigits
    
    for ch in str.unicodeScalars {
        if digitSet.contains(ch) {
            // is digit!
        }
    }
    
    0 讨论(0)
  • 2020-12-29 04:48

    For a single character:

    CharacterSet.decimalDigits.contains(string.unicodeScalars.first!)
    
    0 讨论(0)
提交回复
热议问题