我有一个简单的程序,我正在测试打印机类。
-(void) setInkType {
NSMutableString *theInkType;
InkType typeOfInk;
char inkFromInput[50];
NSLog(@"What type of ink are you using?");
NSLog(@"Options are photoInk, lazerJet, regularInk");
fgets(inkFromInput,50,stdin);
theInkType = [[NSMutableString alloc] initWithUTF8String:inkFromInput];
NSLog(@"%@",theInkType);
if([theInkType compare: @"photoInk"]==true) {
typeOfInk.photoInk = 564;
NSLog(@"Your using a photo ink of type %d",typeOfInk.photoInk);
inkType.photoInk = typeOfInk.photoInk;
}
else { if ([theInkType compare: @"lazerJet"] == true) {
typeOfInk.lazerJet = 94;
NSLog(@"Your using a lazer toner of type %d",typeOfInk.lazerJet);
inkType.lazerJet = typeOfInk.lazerJet;
}
else { if ([theInkType compare: @"regularInk"] == true) {
typeOfInk.regularInk = 910;
NSLog(@"Your using a regular ink of type %d",typeOfInk.regularInk);
inkType.regularInk = typeOfInk.regularInk;
}
}
}
}
当我运行它时,我可以输入“photoInk”和“lazerInk”,我得到一个正确的输出。为什么当我输入“regularInk”时输出结果不好?
我认为这可能是我的{},但我不太确定。我一直在摸不着头几个小时。
如果再有Cocoa调味料,我可以做到这样看起来更顺畅让我知道了。
答案 0 :(得分:3)
-compare:
不返回布尔值true / false值,它返回NSComparisonResult
,NSOrderedAscending
,NSOrderedSame
或NSOrderedDescending
。
所以你可以这样做:
if ([theInkType compare: @"photoInk"] == NSOrderedSame)
但实际上,-isEqual:
方法更接近你的真实意图。
if ([theInkType isEqual: @"photoInk"])
另外:你的else
条款错了。不是这个:
if (x) {
...
}
else { if (y) {
...
} }
但是这个:
if (x) {
...
} else if (y) {
...
}
答案 1 :(得分:0)
我认为这对你有用。这是我从链接中得到的答案:
SOLUTION-1:我稍后对其进行了修改,以使您的案例更加轻松:
让我们假设String1是一个NSString。
//Though this is a case sensitive comparison of string
BOOL boolVal = [String1 isEqualToString:@"My Default Text"];
//Here is how you can do case insensitive comparison of string:
NSComparisonResult boolVal = [String1 compare:@"My Default Text" options:NSCaseInsensitiveSearch];
if(boolVal == NSOrderedSame)
{
NSLog(@"Strings are same");
}
else
{
NSLog(@"Strings are Different");
}
如果boolVal是NSOrderedSame,那么你可以说字符串是相同的,否则它们是不同的。
解决方案-2:您也不会觉得这很简单,您可以在同一链接下参考 Macmade的回答。
希望这会对你有所帮助。
希望这会对你有所帮助。