次のコードは機能しますが、初期化されていない変数に関する警告が生成されます。
このコードは、@"2C12;5H1;1O16" などの分子を表す文字列を解析します。フォーマットが正しく、すべての成分が有効な同位体であることを確認します。リストされているように、完全に機能しますが、コンパイラから警告が生成されます。
//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;
}
ただし、初期化すると
NSString* multipletString = @"";
NSString* atomString = @"";
NSInteger A = -1;
次に、NSScanner は、元の初期化された値でそれらを返します。基本的なものが欠けていますか?
コンパイラからの警告を無視したくないのですが、コンパイラの提案に従うとコードが壊れます。したがって、これは私のコードを修正する方法についての要求というよりも、基本的な情報の要求であると思います。ありがとう!