Czy stringByAppendingString:
w Objective-C są jakieś skróty do konkatenacji ciągów znaków ( ) lub skróty do NSString
ogólnej pracy z nimi ?
Na przykład chciałbym zrobić:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
coś więcej jak:
string myString = "This";
string test = myString + " is just a test";
objective-c
nsstring
string-concatenation
typoneerror
źródło
źródło
Odpowiedzi:
Dwie odpowiedzi, o których mogę myśleć ... żadna nie jest tak przyjemna jak posiadanie operatora konkatenacji.
Najpierw użyj metody
NSMutableString
, która maappendString
metodę, eliminując część potrzeby stosowania dodatkowych ciągów temp.Po drugie, użyj
NSArray
do konkatenacjicomponentsJoinedByString
metodą.źródło
[NSMutableString appendString]
jest bardziej przyjazny dla pamięci niż[NSString stringByAppendingStrings]
.[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
Technika wydaje się najbardziej eleganckie. To powinna być wybrana odpowiedź.Opcja:
Inna opcja:
Zgaduję, że nie jesteś zadowolony z wielu dodatków (a + b + c + d), w którym to przypadku możesz zrobić:
używając czegoś takiego
źródło
Jeśli masz 2 literały NSString , możesz również po prostu to zrobić:
Przydaje się to również przy dołączaniu do #defines:
Cieszyć się.
źródło
@
sznurków po pierwszym.@"I" " really" " enjoy"...
NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";
nie działa? MamExpected '@' in program
błąd :(TABLE_NAME
zdefiniowane?Powracam do tego postu i zawsze kończę sortowanie odpowiedzi, aby znaleźć to proste rozwiązanie, które działa z tyloma zmiennymi, ile potrzeba:
Na przykład:
źródło
Utwórz metodę:
Następnie, w dowolnej funkcji, w której jest to potrzebne, ustaw łańcuch lub pole tekstowe lub cokolwiek na wartość zwracaną przez tę funkcję.
Lub, aby utworzyć skrót, przekonwertuj NSString na ciąg C ++ i użyj tam znaku „+”.
źródło
Dobrze, że jelita grubego jest rodzajem specjalnym symbolem, ale jest częścią podpisu metodzie możliwe jest exted
NSString
z kategorii, aby dodać ten zakaz idiomatyczne styl łańcuchów znaków:Możesz zdefiniować tyle argumentów oddzielonych dwukropkami, ile uznasz za przydatne ... ;-)
Dla pewności dodałem również
concat:
zmienne argumenty, które pobierająnil
zakończoną listę ciągów.źródło
stringWithFormat:
. Nie wspominając o braku nazwanych parametrów, który jest nie tylko niestandardowy, ale także mylący.stringByAppendingString
i nigdy nie mówił nic o używaniu więcej niż dwóch argumentów. Podoba mi się ta odpowiedź bardziej niż zaakceptowana. To całkiem sprytne.Użyj
stringByAppendingString:
tego sposobu:LUB
źródło
Makro:
Przypadki testowe:
Alternatywne makro: (jeśli chcesz wymusić minimalną liczbę argumentów)
źródło
-[NSString stringByAppendingString:]
w tym przypadku użycia - z tym pierwszym otrzymasz wyjątek, jeśli argument jest,nil
ale nie, jeśli odbiornik jest. Możliwe więc, że 50% szans na błąd w twoim podajniku łańcuchowym zawiedzie cicho i 50% na wyjątek. Dzięki temustringConcat
masz gwarancję wyjątku w dowolnymnil
miejscu na liście. Co przynajmniej jest bardziej przewidywalne.Podczas budowania żądań usług internetowych uważam, że wykonanie czegoś takiego jest bardzo łatwe i sprawia, że konkatenacja jest czytelna w Xcode:
źródło
Skrót przez utworzenie makra AppendString (AS) ...
Uwaga:
Jeśli używasz makra, oczywiście po prostu rób to z argumentami variadic, zobacz odpowiedź EthanB.
źródło
źródło
Oto prosty sposób, używając nowej składni literału tablicowego:
źródło
Po kilku latach pracy z Objective CI myśl, że jest to najlepszy sposób pracy z Celem C, aby osiągnąć to, co próbujesz osiągnąć.
Zacznij wpisywać „N” w swojej aplikacji Xcode, a automatycznie uzupełni się do „NSString”. wpisz „str” i automatycznie uzupełnia się do „stringByAppendingString”. Więc naciśnięcia klawiszy są dość ograniczone.
Po opanowaniu naciskania klawisza „@” i pisaniu na klawiaturze proces pisania czytelnego kodu nie staje się już problemem. To tylko kwestia dostosowania.
źródło
Jedynym sposobem
c = [a stringByAppendingString: b]
skrócenia jest użycie autouzupełniania w dowolnymst
momencie.+
Operator jest częścią C, która nie wie o obiektach Objective-C.źródło
#define
można go użyć do skrócenia.Co powiesz na skrócenie
stringByAppendingString
i użycie #define :Zatem użyłbyś:
Problem polega na tym, że działa tylko dla dwóch ciągów, musisz owinąć dodatkowe nawiasy, aby uzyskać więcej dodatków:
źródło
źródło
źródło
Próbowałem tego kodu. zadziałało dla mnie.
źródło
appendString:
jeśli używaszNSMutableString
.Próbowałem następujące w
lldb
okienkuktóre błędy.
zamiast tego użyj przydziału i
initWithFormat
metody:źródło
Ma to na celu lepsze rejestrowanie i rejestrowanie tylko - w oparciu o doskonałą metodę wielu argumentów dicius. Definiuję klasę Logger i nazywam ją tak:
Prawie dobrze, z wyjątkiem konieczności kończenia var argumentów na „zero”, ale przypuszczam, że nie ma takiej możliwości w Objective-C.
Logger.h
Logger.m
Aby tylko konkatować łańcuchy, zdefiniowałbym kategorię na NSString i dodałbym do niej statyczną (+) metodę konkatenacji, która wygląda dokładnie tak, jak metoda log powyżej, z tym wyjątkiem, że zwraca łańcuch. Działa na NSString, ponieważ jest to metoda łańcuchowa, i jest statyczna, ponieważ chcesz utworzyć nowy ciąg z ciągów 1-N, a nie wywoływać go na żadnym z ciągów, które są częścią append.
źródło
źródło
Wypróbuj stringWithFormat:
źródło
Podczas pracy z łańcuchami często łatwiej jest utworzyć plik źródłowy ObjC ++, a następnie mogę połączyć std :: strings przy użyciu drugiej metody przedstawionej w pytaniu.
źródło
Moja preferowana metoda to:
Możesz to osiągnąć, dodając metodę łączenia do NSArray z kategorią:
@[]
jest to krótka definicja dlaNSArray
, myślę, że jest to najszybsza metoda łączenia łańcuchów.Jeśli nie chcesz korzystać z kategorii, użyj bezpośrednio
componentsJoinedByString:
metody:źródło
Możesz użyć NSArray jako
lub
możesz użyć
źródło
Każdy z tych formatów działa w XCode7 podczas testowania:
Z jakiegoś powodu potrzebujesz tylko operatora @ w pierwszym ciągu miksu.
Jednak nie działa przy wstawianiu zmiennych. W tym celu możesz użyć tego niezwykle prostego rozwiązania, z wyjątkiem makra na „cat” zamiast „i”.
źródło
Dla wszystkich miłośników Celu C, którzy potrzebują tego w teście interfejsu użytkownika:
źródło
źródło
Wyobraźmy sobie, że nie wiesz, ile tam jest łańcuchów.
źródło