You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求NSString的boolValue方法的纯Swift等效实现方案

关于NSString boolValue的细节解析与纯Swift实现

1. 空白字符的定义

NSString的boolValue所识别的空白字符,对应Unicode标准中的空白类字符,具体包括:

  • 普通空格(U+0020)
  • 制表符(U+0009)
  • 换行符(U+000A)
  • 回车符(U+000D)
  • 垂直制表符(U+000B)
  • 换页符(U+000C)
    简单来说,就是Swift中CharacterSet.whitespaces包含的所有字符。

2. "默认采用十进制表示"的含义

这句话的核心是:判断数字有效性时,仅识别十进制数字(0-9),不支持八进制(如012)、十六进制(如0x1A)等其他进制格式。同时结合官方说明里的"跳过开头的零"规则,比如字符串"00123"会被视为有效十进制数字(跳过前导零后遇到1),返回YES;但纯"0"因为没有后续的1-9数字,会返回NO。

3. 纯Swift版boolValue实现

以下是严格复现NSString.boolValue逻辑的Swift扩展,无需转成NSString:

extension String {
    var boolValue: Bool {
        let trimmed = self.trimmingCharacters(in: .whitespaces)
        guard !trimmed.isEmpty else { return false }
        
        var index = trimmed.startIndex
        
        // 跳过可选的正负号
        if trimmed[index] == "+" || trimmed[index] == "-" {
            index = trimmed.index(after: index)
            guard index < trimmed.endIndex else { return false }
        }
        
        // 跳过所有前导零
        while index < trimmed.endIndex && trimmed[index] == "0" {
            index = trimmed.index(after: index)
        }
        
        // 处理剩余字符的开头
        guard index < trimmed.endIndex else { return false }
        let char = trimmed[index]
        
        return char == "Y" || char == "y" || char == "T" || char == "t" ||
               (char >= "1" && char <= "9")
    }
}

测试示例:

print("  +000Yabc".boolValue) // true
print("  -00123xyz".boolValue) // true
print("0".boolValue) // false
print("  t".boolValue) // true
print("F".boolValue) // false
print("  000".boolValue) // false

内容的提问来源于stack exchange,提问作者David Hoerl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:00:09