Objective c NSNumber文本的比较
我真的很喜欢Objective-C中的新文字。我想知道是否有更好的方法来比较数字 例如,如果我想比较Objective c NSNumber文本的比较,objective-c,comparison,objective-c-literals,Objective C,Comparison,Objective C Literals,我真的很喜欢Objective-C中的新文字。我想知道是否有更好的方法来比较数字 例如,如果我想比较a和b: a = @1; b = @2; 只有这样才能比较它们: [a intValue] > [b intValue] 还是有更好、更优雅的解决方案?NSNumber实现了-比较:(其他许多类也是如此)。所以你可以说 switch ([a compare:b]) { case NSOrderedAscending: // a < b // blah bla
a
和b
:
a = @1;
b = @2;
只有这样才能比较它们:
[a intValue] > [b intValue]
还是有更好、更优雅的解决方案?
NSNumber
实现了-比较:
(其他许多类也是如此)。所以你可以说
switch ([a compare:b]) {
case NSOrderedAscending: // a < b
// blah blah
break;
case NSOrderedSame: // a == b
// blah blah
break;
case NSOrderedDescending: // a > b
// blah blah
break;
}
开关([a比较:b]){
案例1:取消搜索://ab
//废话
打破
}
对于相等性检查,您可以使用isEqualToNumber
检查id
或内容是否相等(后者使用比较
):
不确定为什么他们也没有实现
isGreaterThanNumber
和isLessThanNumber
方便方法(可能=
和NSNumber也有一个IseQualNumber:以下是代码片段,用于检查哪些方法工作正常:
NSLog(@"%d", number1 == number2);
NSLog(@"%d", [number1 isEqual:number2]);
NSLog(@"%d", [number1 isEqualToNumber:number2]);
输出:
1
1
1
结论:
1
1
1
要理解比较,您需要了解实例分配。NSNumber在内部实现分配对象的缓存,并使用值将现有对象映射到任何新创建的对象。如果发现现有NSNumber对象包含值1,则不会创建新的NSNumber实例。好吧,可能是唯一添加的IseQualtonumberr:
因为isEqualTo…
方法在许多其他地方使用[比如IseQualtString:
].只是我知道。谢谢…我不知道比较,但你还是不知道>=or@0xSina,如果你的意思是我没有指定一个简单的方法来做=
和啊,玩得很好。我现在觉得很笨,没有想到:)如果你愿意,你可以编写一个类别添加方法,比如[a greaterThan:b]
和[a equalTo:b]
编译器对运算符的重写最终可能会作为此数字文字语法的扩展出现@1
已经变成了[NSNumber numberWithInt:1]
——没有理由不允许@1>@2
被重写为[@1大于:@2]
(好吧,除了可能的混淆之外没有理由:“如果(1>@2)
,我为什么不能做。”是的,它将删除低级指针比较…但它们总是可以执行类似于@1@>=@2的操作,然后在NSNumber中实现greaterThanOrEqualTo,因此它将被翻译为[@1 greaterThanOrEqualTo:@2]…通过这种方式,您可以保留指针算法和逻辑比较器。他们可以抛弃装箱原始类型的愚蠢想法,只需重新使用int
:-)
if (nsnComp2 (a, b) >= 0) ... // returns -1/0/+1
NSLog(@"%d", number1 == number2);
NSLog(@"%d", [number1 isEqual:number2]);
NSLog(@"%d", [number1 isEqualToNumber:number2]);
1
1
1