Emi*_*mil 1 c language-agnostic objective-c ios
如何在一个参数中与多种可能性进行比较?
例:
if ((integer == 2) || (integer == 5))
if ((string == "hello") || (string == "dolly))
Run Code Online (Sandbox Code Playgroud)
如果您可以像这样编写代码,可以节省很多代码:
if (integer == (2 || 5))
if (string == ("hello" || "dolly"))
Run Code Online (Sandbox Code Playgroud)
Jen*_*edt 11
首先,字符串比较在C中不起作用,我对Objective-c一无所知.
为了与编译时积分常量进行比较,在C中你有switch语句:
switch (integer) {
case 2: ;
case 5: ;
/* do stuff here */
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可以检查NSSet是否包含某个对象.这不适用于int,因为它不是一个对象,但可以使用NSString.
我相信它可以写成这样:
if ( [[NSSet setWithObjects:@"hello", @"dolly", nil] containsObject:string] )
Run Code Online (Sandbox Code Playgroud)
所以,如果你想比较整数,你应该用NSNumber包装它们.
如果你不比较数十个对象,这将不会保存很多代码,但这看起来非常类似于你想得到的:)
更新:
或者另一种方式(非常类似于John Calsbeek的答案,但适用于多个参数):
@implementation NSObject (IsEqualMultiple)
- (BOOL)isEqualToOneOfObjects:(id)firstObject, ... {
id eachObject;
va_list argumentList;
if (firstObject) {
if ( [self isEqual:firstObject] ) return YES;
va_start(argumentList, firstObject);
while (eachObject = va_arg(argumentList, id))
if ( [self isEqual:eachObject] ) return YES;
va_end(argumentList);
}
return NO;
}
@end
Run Code Online (Sandbox Code Playgroud)
用法:
if ( [string isEqualToOneOfObjects:@"hello", @"dolly", @"this", @"is", @"Louis", nil] )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1221 次 |
最近记录: |