Objective c NSScanner仅处理未初始化的变量。为什么?
下面的代码可以工作,但会生成有关未初始化变量的警告 该代码解析表示分子的字符串,如@“2C12;5H1;1O16”。检查其格式是否正确,以及所有成分是否为有效同位素。如清单所示,它工作正常,但会从编译器生成警告Objective c NSScanner仅处理未初始化的变量。为什么?,objective-c,cocoa,nsscanner,Objective C,Cocoa,Nsscanner,下面的代码可以工作,但会生成有关未初始化变量的警告 该代码解析表示分子的字符串,如@“2C12;5H1;1O16”。检查其格式是否正确,以及所有成分是否为有效同位素。如清单所示,它工作正常,但会从编译器生成警告 //listOfNames is a global variable, an NSArray containing strings of all isotope names i.e. @"Na23" -(bool)canGrokSpeciesName:(NSString*)theSpe
//listOfNames is a global variable, an NSArray containing strings of all isotope names i.e. @"Na23"
-(bool)canGrokSpeciesName:(NSString*)theSpeciesName{
//Test that the species name makes sense
//Names should be of the form of repeated @"nnSSaa" with nn being the multiplier, SS being the element name, aa being the atomic mass number
bool couldGrok = [theSpeciesName isNotEqualTo:@""];
if(couldGrok){
NSArray* listOfAtomsWithMultiplier = [theSpeciesName componentsSeparatedByString:@";"];
for (int i=0; i<[listOfAtomsWithMultiplier count]; i++) NSLog(@"%@", [listOfAtomsWithMultiplier objectAtIndex:i]);
NSInteger multiplet[ [listOfAtomsWithMultiplier count] ];
bool ok[ [listOfAtomsWithMultiplier count] ];
bool noFail = true;
for (int i=0; i<[listOfAtomsWithMultiplier count]; i++) {
NSScanner* theScanner = [NSScanner scannerWithString:[listOfAtomsWithMultiplier objectAtIndex:i]];
NSString* multipletString;
if(![theScanner isAtEnd]) [theScanner scanUpToCharactersFromSet:[NSCharacterSet letterCharacterSet] intoString:&multipletString];
multiplet[i] = [multipletString integerValue];
NSString* atomString;
if(![theScanner isAtEnd]) [theScanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&atomString];
NSInteger A;
if(![theScanner isAtEnd]) [theScanner scanInteger:&A];
NSLog(@"%@%i with multiplet of %i", atomString, (int)A, (int)multiplet[i]);
bool hasBeenFound = false;
for(int j=0; j<[listOfNames count]; j++){
if(noFail) hasBeenFound = hasBeenFound || [[listOfNames objectAtIndex:j] isEqualToString:[NSString stringWithFormat:@"%@%i", atomString, (int)A]];
}
couldGrok = couldGrok && noFail && hasBeenFound;
}
}
return couldGrok;
然后NSScanner返回它们的初始初始化值。我缺少一些基本的东西吗
我不希望忽略来自编译器的警告,但是遵循编译器的建议会破坏代码。因此,我想这更多的是对基本信息的请求,而不是对如何修复代码的请求。谢谢 修复示例代码:
listOfNames
未声明。同样作为ObjC约定变量名,以小写字母开头。请您解释一下您想要的确切输出??listOfNames是一个包含所有允许的同位素名称的NSArray,如@“Na23”等。目标是获取一个分子,如@“2H1;1O16”,并验证组分同位素是否有效。代码按照发布的方式工作,但我收到编译警告,建议我初始化上面提到的三个变量。这样做会导致代码不再工作……您是否仔细检查了代码以了解在这两种情况下(初始化和未初始化)会发生什么情况?另外,为什么要将它们初始化为字符串而不是,例如,NSString*multipletString=nil代码>和NSInteger A=0代码>?
NSString* multipletString = @"";
NSString* atomString = @"";
NSInteger A = -1;