我想计算以下字符串中字母、数字和特殊字符的数量:

let phrase = "The final score was 32-31!"

我试过:

for tempChar in phrase {
    if (tempChar >= "a" && tempChar <= "z") {
       letterCounter++
    }
// etc.

但我有错误.我在这方面try 了各种各样的变化——仍然会出错——比如:

找不到"&lt;="的重载它接受提供的参数

推荐答案

Swift 5rustylepord's answer.

Update for Swift 3:

let letters = CharacterSet.letters
let digits = CharacterSet.decimalDigits

var letterCount = 0
var digitCount = 0

for uni in phrase.unicodeScalars {
    if letters.contains(uni) {
        letterCount += 1
    } else if digits.contains(uni) {
        digitCount += 1
    }
}

(Previous answer for older Swift versions)

一个可能的快速解决方案:

var letterCounter = 0
var digitCount = 0
let phrase = "The final score was 32-31!"
for tempChar in phrase.unicodeScalars {
    if tempChar.isAlpha() {
        letterCounter++
    } else if tempChar.isDigit() {
        digitCount++
    }
}

Update:上述解决方案仅适用于ASCII字符集中的字符,

let letters = NSCharacterSet.letterCharacterSet()
let digits = NSCharacterSet.decimalDigitCharacterSet()

var letterCount = 0
var digitCount = 0

for uni in phrase.unicodeScalars {
    if letters.longCharacterIsMember(uni.value) {
        letterCount++
    } else if digits.longCharacterIsMember(uni.value) {
        digitCount++
    }
}

Update 2:从Xcode 6 beta 4开始,第一个解决方案不再有效,因为

Swift相关问答推荐

如何将EnvironmentObject从UIKit视图控制器传递到SwiftUI视图

SwiftUI正在初始化不带状态变量的绑定变量

如何获取嵌套数组中项的路径以修改数组?

如何在SwiftUI的文本视图中显示NSMutableAttributedString?

为什么这个快速代码不显示文本字段?

在Swift中如何将NSUrl转换为本地路径URL

在Swift中如何用变量计算0.9的立方

为什么我在我的 Swift iOS 应用程序项目中收到 Xcode 中的错误消息无法识别的 Select 器发送到类?

从一个范围减go 多个范围

Vapor 4,如何按外键过滤?

调用从 SwiftUI 视图传递到 PageViewController.Coordinator 的函数

获取 SwiftUI 中 Binding 的值更改更新

如何从 LLDB 调用带有断点的 Swift 函数?

根据禁用与否更改 SwiftUI 中按钮的 colored颜色

你如何在 UIBarItem 中使用 setTitleTextAttributes:forState?

iOS/Swift:如何检测 UITextField 上的touch 动作

由于编译器中的内部保护级别,无法访问框架 init 中的公共 struct

两个 Date 对象之间的所有日期 (Swift)

Objective-C 方法与可选需求方法 Swift 冲突

从 Swift 初始化程序调用方法