我正在尝试计算文本字段中输入的字符串中的数字,这是我的代码
var num = 0
.
.
.
let stringArray = password.components(separatedBy: CharacterSet.decimalDigits.inverted)
for item in stringArray {
if let number = Int(item) {
print("number: \(number)")
num += 1
}
}
if num > 4 {
print("You Shall Pass!!")
}
else {
print("You Shall Not Pass!!")
}
但是当我打印数字时,它保持为1。无论我在文本字段中输入多少个数字,它始终会打印1,并且“您不会通过!”
答案 0 :(得分:4)
这是一种更简单的方法。更改此行,
let stringArray = password.components(separatedBy: CharacterSet.decimalDigits.inverted)
收件人,
let stringArray = password.components(separatedBy: CharacterSet.decimalDigits)
现在数字位数比stringArray
中的元素数少一。所以您可以使用它。
if (stringArray.count - 1) > 4 {
print("You Shall Pass!!")
} else {
print("You Shall Not Pass!!")
}
答案 1 :(得分:2)
在更快捷的方法中,您可以在filter
上使用password string
来识别其中的数字频率,例如:
var password = "tHis4is5test8,#pass11" // 45811 - 5 numeric characters
let numsFrequency = password.filter {"0"..."9" ~= $0}.count
print(numsFrequency) // 5
OR
您可以将其添加到Extension
中的String
中并轻松使用。
extension String {
var numbersFrequency: Int {
return String(self.filter { "0"..."9" ~= $0 }).count
}
}
用法
print("1, 2, and 3".numbersFrequency) // 3
print("tHis4is5test8,#pass11".numbersFrequency) //5
let newPassword = "tHis4is5test8,#pass11"
print(newPassword.numbersFrequency) //5
答案 2 :(得分:1)
另一种方法:
使用正则表达式删除所有非数字字符并计算结果。
let numberOfDigits = password.replacingOccurrences(of: "[^0-9]", with: "", options: .regularExpression).count