使用NSString比较的问题:选项:范围,冲突的结果

JOM*_*JOM 1 iphone comparison nsstring

哦,这段代码出了什么问题!?!?!

    NSString *s1 = @"5 Oct 2010 18:30";
    NSString *s2 = @"5 Oct 2010 09:47";
    NSRange range = {0, 11}; // Both "D MMM YYYY " and "DD MMM YYYY"
    NSComparisonResult result = 0;
    result = [s1 compare:s2 options:NSLiteralSearch range:range];
    // result == -1
    NSString *sa = [s1 substringWithRange:range];
    NSString *sb = [s2 substringWithRange:range];
    result = [sa compare:sb];
    // result == 0
Run Code Online (Sandbox Code Playgroud)

为什么我会从这两个主持人得到不同的结果?据我所知,它们应该是一样的吗?

小智 7

感谢CocoaDev邮件列表中的善良人员,这是一个更好的答案!

方法签名中引用的"范围" 仅是接收字符串的范围.

因此,在您的第一个示例中,您将s1范围内的字符与整个s2进行比较; 并且,正确地,报告为-1.

这解释了fluchtpunkt注意到的明显异常.