如何以特定方式从 Swift 中的字符串中提取数字

fas*_*lgo 6 string loops numbers while-loop swift

我正在努力从 Swift 中的字符串中提取数字。我正在执行以下操作:

let expression: String = "abc123aa223bb45"
for (indx, ch) in expression.enumerated() {
    if ch.isLetter { continue }
    else if ch.isNumber {
        var val: Int = 0
        while(indx < expression.count && ch.isNumber){
            val = val * 10 + (ch.asciiValue - 48)
            //how can I proceed and increment both indx and ch ...
        }
        // here I'm going to do smthing with every extracted number
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决我遇到的这个问题吗?

我也使用扩展

extension Character {
    var asciiValue: Int {
        get {
            let s = String(self).unicodeScalars
            return Int(s[s.startIndex].value)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您在发布的代码片段中看到的

小智 6

以下代码片段将从字符串中提取数字

let expression: String = "abc123aa223bb45"    
let stringArray = expression.components(separatedBy: CharacterSet.decimalDigits.inverted)
for item in stringArray {
    if let number = Int(item) {
        print(number)
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以对 Int 进行扩展,其功能如下

extension Int {
    static func parse(from string: String) -> Int? {
        return Int(string.components(separatedBy: CharacterSet.decimalDigits.inverted).joined())
    }
}
Run Code Online (Sandbox Code Playgroud)

可以像这样使用

let expression: String = "abc123aa223bb45"
if let number = Int.parse(from: expression) {
    print(number)
}
Run Code Online (Sandbox Code Playgroud)