CFStringTokenizer文档在CFStringTokenizerAdvanceToNextToken()中有两个冲突的语句:
CFStringTokenizerAdvanceToNextToken
...
返回值
如果标记生成器成功找到标记并将其设置为当前标记,则标记的类型。如果tokenizer无法找到令牌,则返回kCFStringTokenizerTokenNone。有关可能的值,请参阅“令牌类型”。
...
如果找到令牌,则将其设置为当前令牌,该函数返回true;否则当前令牌无效,函数返回false。
第一段(返回令牌类型)是我想看到的:例如,它可以让您检查令牌是否完全由非字母数字字符组成。但是,第二段(返回true或false)似乎是实际发生的事情。
为什么会出现这种想法,或者如何解决这个问题?
答案 0 :(得分:1)
标题注释没有提到返回true或false,当标题和在线文档不同意时,它通常是正确的标题。
在一个简单的测试中,我能够获得0和1以外的返回值,因此您看到的问题可能更具体;你能发布失败的示例代码吗?
答案 1 :(得分:0)
在更广泛的“非零”和“零”意义上,它们可能意味着“真实”和“虚假”。如果找到一个令牌,则该函数返回kCFStringTokenizerTokenNormal
(即1)或某些掩码的组合(无论是哪种方式,非零/“真”)。如果没有,则函数返回kCFStringTokenizerTokenNone
(为零/“假”)。
这当然是模糊的语言,所以请在Apple Bug Reporter上提交文档错误。
答案 2 :(得分:0)
如果您正在寻找的是忽略CFNumber类型令牌的能力,那么您可以使用:
while (tokenType != kCFStringTokenizerTokenNone) {
if ( (tokenType & kCFStringTokenizerTokenHasHasNumbersMask) == 0) { // ignore numbers
range = CFStringTokenizerGetCurrentTokenRange(tokenizer);
NSString *token = [string substringWithRange:NSMakeRange(range.location, range.length)];
[tokensArray addObject:token];
}
tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer);
}