求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
相关产品推荐
相关产品推荐

