n.e*_*ind 2 iphone cocoa-touch if-statement objective-c
我有一个字符串(包含一个月),并想检查它是一个'短'月(根据名称的长度)还是'月'名称.根据名称的长度,我想设置它的位置:
NSString* dateMonth = @"SEPTEMPER";
if (dateMonth == @"MARCH" || @"APRIL" || @"MAY" || @"JUNE" || @"JULY") {
CGRect calendarFrame = CGRectMake(170+100, 8, 200, 50);
calendar1 = [[UIView alloc] initWithFrame:calendarFrame];
calendar1.clipsToBounds = true;
} else {
CGRect calendarFrame = CGRectMake(170, 8, 200, 50);
calendar1 = [[UIView alloc] initWithFrame:calendarFrame];
calendar1.clipsToBounds = true;
}
Run Code Online (Sandbox Code Playgroud)
这种情况最终应该在ELSE函数中,但它不会...我最终得到170 + 100的位置.
我究竟做错了什么?任何帮助将非常感谢.
这段代码
if (dateMonth == @"MARCH" || @"APRIL") {
Run Code Online (Sandbox Code Playgroud)
实际上被评估为
if ((dateMonth == @"MARCH") || (@"APRIL")) {
Run Code Online (Sandbox Code Playgroud)
并且由于@"APRIL"不是零或零,它被评估为TRUE.
可以做些什么
第1步(部分修复)
if ((dateMonth == @"MARCH") || (dateMonth == @"APRIL")) {
Run Code Online (Sandbox Code Playgroud)第2步(这已经有效)
使用isEqual方法来比较字符串(或任何其他对象)而不是==.isEqualToString也像其他人建议的那样有效.
第3步(额外英里)
您可以通过使用set使其更具可读性(并且更简单).
NSSet *shortMonths = [NSSet setWithObjects:@"MARCH", @"APRIL", @"MAY", nil];
if ([shortMonths containsObject:@"APRIL"]) {
Run Code Online (Sandbox Code Playgroud)