Chcę porównać wartość an NSString
z ciągiem „Wrong”. Oto mój kod:
NSString *wrongTxt = [[NSString alloc] initWithFormat:@"Wrong"];
if( [statusString isEqualToString:wrongTxt] ){
doSomething;
}
Czy naprawdę muszę utworzyć NSString dla „Wrong”?
Czy mogę również porównać wartość UILabel
a text
do łańcucha bez przypisywania wartości etykiety do ciągu?
Odpowiedzi:
Nie, czemu po prostu nie zrobić:
if([statusString isEqualToString:@"Wrong"]){ //doSomething; }
Użycie
@""
po prostu tworzy literał ciągu, który jest prawidłowyNSString
.Tak, możesz zrobić coś takiego:
UILabel *label = ...; if([someString isEqualToString:label.text]) { // Do stuff here }
źródło
if ([statusString isEqualToString:@"Wrong"]) { // do something }
źródło
Brian, również warto tu wrzucić - inni oczywiście mają rację, że nie musisz deklarować zmiennej typu string. Jednak następnym razem, gdy będziesz chciał zadeklarować ciąg, nie musisz wykonywać następujących czynności:
NSString *myString = [[NSString alloc] initWithFormat:@"SomeText"];
Chociaż powyższe działa, zapewnia zachowaną zmienną NSString, którą będziesz musiał jawnie zwolnić po zakończeniu jej używania.
Następnym razem, gdy będziesz potrzebować zmiennej łańcuchowej, możesz użyć symbolu „@” w znacznie wygodniejszy sposób:
NSString *myString = @"SomeText";
Zostanie to automatycznie wydane, gdy skończysz, więc unikniesz również wycieków pamięci ...
Mam nadzieję, że to pomoże!
źródło
new
lubcopy
na przykładnewObject
(fromNSDictionaryController
) lubmutableCopy
(fromNSObject
) developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/ ...Możesz także użyć metod klasy NSString, które również utworzą instancję autoreleased i mają więcej opcji, takich jak formatowanie ciągów:
NSString *myString = [NSString stringWithString:@"abc"]; NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
źródło