Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 计算字符串中的数字字符总数_Swift_String - Fatal编程技术网

Swift 计算字符串中的数字字符总数

Swift 计算字符串中的数字字符总数,swift,string,Swift,String,我试图计算文本字段中输入的字符串中的数字,这是我的代码 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

我试图计算文本字段中输入的字符串中的数字,这是我的代码

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!!")
}

但是当我打印num时,它保持为1。无论我在文本字段中输入多少个数字,它都会打印1和“你不能通过!!”

这是一个更简单的方法。换一行,

let stringArray = password.components(separatedBy: CharacterSet.decimalDigits.inverted)
对,

现在,位数比
stringArray
中的元素数少一位。所以你可以用这个

if (stringArray.count - 1) > 4 {
    print("You Shall Pass!!")
} else {
     print("You Shall Not Pass!!")
}

在更快速的方法中,您可以使用
密码字符串
上的
过滤器
来识别其中数字的频率,如:

var password = "tHis4is5test8,#pass11" // 45811 - 5 numeric characters
let numsFrequency = password.filter {"0"..."9" ~= $0}.count
print(numsFrequency) // 5

您可以将其添加到
扩展名
字符串中,并轻松使用

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
另一种方法:

使用正则表达式删除所有非数字字符并计算结果

let numberOfDigits = password.replacingOccurrences(of: "[^0-9]", with: "", options: .regularExpression).count

您的输入是什么样子的?谢谢,它工作正常,但我想知道为什么数字小于数组中的元素数?@Nodoodle使用示例打印
stringArray
。当你真正看到它时,你会更好地理解它;)
let numberOfDigits = password.replacingOccurrences(of: "[^0-9]", with: "", options: .regularExpression).count