Domanda

Devo creare un NSString che ha una singola lettera maiuscola casuale.

Posso ottenere un int casuale e posso costruire una stringa C da esso e quindi creare l'NSString, ma immagino che ci debba essere un modo migliore e più cacao.

Grazie!

È stato utile?

Soluzione

Puoi semplicemente creare una NSString contenente quelle che consideri lettere e estrarre un carattere casuale da esso. Ecco una categoria di esempio:

@implementation NSString(RandomLetter)
- (NSString *)randomLetter {
    return [self substringWithRange:[self rangeOfComposedCharacterSequenceAtIndex:random()%[self length]]];
}
@end

(Dovrai srandom (time ()) a un certo punto, ovviamente. Forse includi un metodo di inizializzazione nella tua categoria.)

Altri suggerimenti

Penso che il modo migliore sia usare una stringa c in modo da poter usare una codifica esplicita. Ecco un esempio:

NSInteger MyRandomIntegerBetween(NSInteger min, NSInteger max) {
    return (random() % (max - min + 1)) + min;
}

NSString *MyStringWithRandomUppercaseLetter(void) {
    char string[2] = {0, 0};
    string[0] = MyRandomIntegerBetween(65, 90); /// 'A' -> 'Z' in ASCII.
    return [[[NSString alloc] initWithCString:string encoding:NSASCIIStringEncoding] autorelease];
}

Ecco un'alternativa, è praticamente la stessa cosa, ma evita la stringa C.

NSString *MyStringWithRandomUppercaseLetter(void) {
    unichar letter = MyRandomIntegerBetween(65, 90);
    return [[[NSString alloc] initWithCharacters:&letter length:1] autorelease];
}

Preferisco le codifiche di caratteri esplicite nel primo approccio, ma sono entrambe corrette.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top