0xS*_*ina 6 comparison objective-c objective-c-literals
我非常喜欢Objective-C中的新文字.我想知道如果有新的增加,有一个更好的方法来比较数字.
例如,如果我想比较a和b:
a = @1;
b = @2;
Run Code Online (Sandbox Code Playgroud)
这是比较它们的唯一方法:
[a intValue] > [b intValue]
Run Code Online (Sandbox Code Playgroud)
还是有更好,更优雅的解决方案?
pax*_*blo 13
对于相等性检查,您可以使用isEqualToNumber哪些检查id或内容是否相等(使用后者compare):
if ([a isEqualToNumber:b]) // if a == b
Run Code Online (Sandbox Code Playgroud)
不知道为什么他们还没有实现isGreaterThanNumber和isLessThanNumber方便的方法(也可能是>=和<=也),因为compare下面的方法似乎有点麻烦.
对于不等式检查,只需compare直接使用(您也可以这样做以实现相等性,如下面的第一个所示):
if ([a compare:b] == NSOrderedSame) // if (a == b)
if ([a compare:b] == NSOrderedAscending) // if (a < b)
if ([a compare:b] == NSOrderedDescending) // if (a > b)
if ([a compare:b] != NSOrderedSame) // if (a != b)
if ([a compare:b] != NSOrderedAscending) // if (a >= b)
if ([a compare:b] != NSOrderedSescending) // if (a <= b)
Run Code Online (Sandbox Code Playgroud)
可以在NSNumber类文档页面上找到详细信息.
请记住,没有什么可以阻止您创建自己的帮助函数,例如,允许代码如下:
if (nsnComp1 (a, ">=", b)) ... // returns true/false (yes/no)
Run Code Online (Sandbox Code Playgroud)
要么:
if (nsnComp2 (a, b) >= 0) ... // returns -1/0/+1
Run Code Online (Sandbox Code Playgroud)
即使它更少Objective-C和更多C :-)这取决于你对"优雅"的定义是否主要受效率或可读性的约束.这是否比你的intValue选择更可取决定你需要做出决定.
NSNumber实现-compare:(和许多其他类一样).所以你可以说
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |