iOS DDMathParser Get Number 'Blocks'

Je construis une application de calculasortingce pour iOS en utilisant DDMathParser. Je voudrais savoir comment séparer une expression ( NSSsortingng ) comme 5+900/32 en ses valeurs numériques individuelles: 5 , 900 et 32 . Je préférerais que je les obtienne dans un NSArray ou un autre object list relativement utile. J'ai entendu dire qu'il y a un moyen facile de le faire avec DDMathParser – C'est pourquoi je suis passé de GCMathParser .

DDMathParser auteur ici.

Oui, c'est très facile, et il y a plusieurs façons de s'y prendre. Si vous voulez simplement savoir quels sont les numbers et ne vous souciez pas des opérateurs, vous pouvez utiliser l'API tokenizing :

 NSError *tokenizingError = nil; DDMathSsortingngTokenizer *tokenizer = [DDMathSsortingngTokenizer tokenizerWithSsortingng:@"5+900/32" error:&tokenizingError]; NSArray *tokens = [tokenizer tokens]; NSMutableArray *numbers = [NSMutableArray array]; for (DDMathSsortingngToken *token in tokens) { if ([token tokenType] == DDTokenTypeNumber) { [numbers addObject:[token numberValue]]; } } // numbers now is @[ @5, @900, @32 ]; 

Il y a cependant une mise en garde à cette approche, et il peut être mieux illustré avec cet exemple: @"-42" . Les jetons dans DDMathParser sont toujours analysés comme des nombres non signés , car le signe less devant est en réalité un opérateur et est appliqué différemment selon les autres opérateurs. Cela signifie que si vous marquez la string @"-42" , vous verrez qu'elle contient deux jetons: un opérateur de négation, et le numéro 42.