在下面的Swift 3代码中,我从字符串中提取所有数字,但我无法弄清楚如何在Swift 4中做同样的事情.
var myString = "ABC26FS464"
let myNumbers = String(myString.characters.filter { "01234567890".characters.contains($0)})
print(myNumbers) // outputs 26464
Run Code Online (Sandbox Code Playgroud)
如何从Swift 4中的字符串中提取所有数字?
85C*_*aro 27
Swift 4使它更简单一些.只需删除.characters并使用
let myNumbers = myString.filter { "0123456789".contains($0) }
Run Code Online (Sandbox Code Playgroud)
但要真正做到这一点,你可以使用decimalDigits字符集......
let digitSet = CharacterSet.decimalDigits
let myNumbers = String(myString.unicodeScalars.filter { digitSet.contains($0) })
Run Code Online (Sandbox Code Playgroud)
小智 5
由于“Character”几乎具有所有最常用的带有“.isXY”计算属性的字符检查,因此您可以使用此模式,这似乎是进行字符串过滤的最方便、最快捷的方法。
/// Line by line explanation.
let str = "Stri1ng wi2th 3numb4ers".filter(\.isNumber) // "1234"
let int = Int(str) // Optional<Int>(1234)
let unwrappedInt = int! // 1234
/// Solution.
extension String {
/// Numbers in the string as Int.
///
/// If doesn't have any numbers, then 0.
var numbers: Int {
Int(filter(\.isNumber)) ?? 0
}
/// Numbers in the string as Int.
///
/// If doesn't have any numbers, then nil.
var optionalNumbers: Int? {
Int(filter(\.isNumber))
}
}
Run Code Online (Sandbox Code Playgroud)