Gibt es Verknüpfungen zur stringByAppendingString:
Verkettung von ( ) Zeichenfolgen in Objective-C oder Verknüpfungen zum Arbeiten mitNSString
allgemeine ?
Zum Beispiel möchte ich machen:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
so etwas wie:
string myString = "This";
string test = myString + " is just a test";
objective-c
nsstring
string-concatenation
typoneerror
quelle
quelle
Antworten:
Zwei Antworten, die ich mir vorstellen kann ... keine ist besonders angenehm, als nur einen Verkettungsoperator zu haben.
Verwenden Sie zuerst eine
NSMutableString
, die eine hatappendString
Methode, die zum Teil die Notwendigkeit für zusätzliche temporäre Strings zu entfernen.Zweitens verwenden Sie eine,
NSArray
um über diecomponentsJoinedByString
Methode zu verketten .quelle
[NSMutableString appendString]
ist speicherfreundlicher als[NSString stringByAppendingStrings]
.[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
Technik scheint die eleganteste. Es sollte die ausgewählte Antwort sein.Eine Option:
Andere Option:
Ich vermute, Sie sind mit mehreren Anhängen (a + b + c + d) nicht zufrieden. In diesem Fall könnten Sie Folgendes tun:
mit so etwas wie
quelle
Wenn Sie 2 NSString- Literale haben , können Sie dies auch einfach tun:
Dies ist auch nützlich, um #defines beizutreten:
Genießen.
quelle
@
s auf den Saiten nach dem ersten.@"I" " really" " enjoy"...
NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";
funktioniert das dann nicht? Ich habe einenExpected '@' in program
Fehler :(TABLE_NAME
definiert?Ich kehre immer wieder zu diesem Beitrag zurück und sortiere immer die Antworten, um diese einfache Lösung zu finden, die mit so vielen Variablen wie nötig funktioniert:
Zum Beispiel:
quelle
Erstellen Sie eine Methode:
Setzen Sie dann in der Funktion, in der Sie sie benötigen, Ihre Zeichenfolge oder Ihr Textfeld oder was auch immer auf den Rückgabewert dieser Funktion.
Um eine Verknüpfung zu erstellen, konvertieren Sie den NSString in einen C ++ - String und verwenden Sie dort das '+'.
quelle
Nun, wie Kolon Art speziellen Symbol ist, sondern ist Teil der Methodensignatur, ist es möglich, die exted
NSString
mit Kategorie dieses hinzufügen nicht-idiomatischen Stil der String - Verkettung:Sie können so viele durch Doppelpunkte getrennte Argumente definieren, wie Sie nützlich finden ... ;-)
Für eine gute Maßnahme habe ich auch
concat:
variable Argumente hinzugefügt , die einenil
terminierte Liste von Zeichenfolgen verwenden.quelle
stringWithFormat:
. Ganz zu schweigen von dem Mangel an benannten Parametern, der nicht nur nicht dem Standard entspricht, sondern auch verwirrend ist.stringByAppendingString
, und er sagte nie etwas darüber, mehr als zwei Argumente zu verwenden. Diese Antwort gefällt mir besser als die akzeptierte. Es ist ziemlich klug.Verwenden Sie
stringByAppendingString:
diesen Weg:ODER
quelle
Makro:
Testfälle:
Alternatives Makro: (wenn Sie eine Mindestanzahl von Argumenten erzwingen möchten)
quelle
-[NSString stringByAppendingString:]
für diesen Anwendungsfall - mit dem ersteren erhalten Sie eine Ausnahme, wenn das Argument ist,nil
aber nicht, wenn der Empfänger ist. Es ist also denkbar, dass die Wahrscheinlichkeit, dass ein Fehler in Ihrem Saitenvorschub lautlos ausfällt, bei 50% liegt und bei einer Ausnahme bei 50%. MitstringConcat
Ihnen ist eine Ausnahme an jedem Ortnil
in der Liste garantiert . Was zumindest vorhersehbarer ist.Beim Erstellen von Anforderungen für Webdienste finde ich Folgendes sehr einfach und macht die Verkettung in Xcode lesbar:
quelle
Verknüpfung durch Erstellen eines AppendString (AS) -Makros ...
Hinweis:
Wenn Sie ein Makro verwenden, tun Sie dies natürlich nur mit verschiedenen Argumenten, siehe EthanBs Antwort.
quelle
quelle
Hier ist eine einfache Möglichkeit, die neue Array-Literal-Syntax zu verwenden:
quelle
Nach ein paar Jahren mit Objective CI ist dies der beste Weg, mit Objective C zusammenzuarbeiten, um das zu erreichen, was Sie erreichen möchten.
Geben Sie in Ihrer Xcode-Anwendung "N" ein und es wird automatisch zu "NSString" vervollständigt. Geben Sie "str" ein und es wird automatisch zu "stringByAppendingString" vervollständigt. Die Tastenanschläge sind also recht begrenzt.
Sobald Sie den Dreh raus haben, die Taste "@" zu drücken und den Vorgang des Schreibens von lesbarem Code zu starten, wird dies kein Problem mehr. Es ist nur eine Frage der Anpassung.
quelle
Die einzige Möglichkeit,
c = [a stringByAppendingString: b]
eine Verkürzung vorzunehmen, besteht darin, die automatische Vervollständigung um denst
Punkt herum zu verwenden. Der+
Operator ist Teil von C, das keine Kenntnisse über Objective-C-Objekte hat.quelle
#define
könnte a verwendet werden, um es zu verkürzen.Wie wäre es mit einer Verkürzung
stringByAppendingString
und Verwendung eines #define :So würden Sie verwenden:
Das Problem ist, dass es nur für zwei Zeichenfolgen funktioniert. Sie müssen zusätzliche Klammern einschließen, um weitere Anhänge zu erhalten:
quelle
quelle
quelle
Ich habe diesen Code ausprobiert. es hat bei mir funktioniert.
quelle
appendString:
Sie zumindest, wenn Sie eine verwendenNSMutableString
.Versucht die folgende in der
lldb
Scheibewelche Fehler.
Verwenden Sie stattdessen alloc und
initWithFormat
method:quelle
Dies dient der besseren Protokollierung und nur der Protokollierung - basierend auf der hervorragenden Mehrfachargument-Methode von dicius. Ich definiere eine Logger-Klasse und nenne sie so:
Fast gut, außer dass man die var args mit "nil" beenden muss, aber ich nehme an, dass es in Objective-C keinen Weg daran vorbei gibt.
Logger.h
Logger.m
Um nur Zeichenfolgen zu verknüpfen , würde ich eine Kategorie in NSString definieren und eine statische (+) Verkettungsmethode hinzufügen, die genau wie die obige Protokollmethode aussieht, außer dass sie die Zeichenfolge zurückgibt. Es ist auf NSString, weil es eine Zeichenfolgenmethode ist, und es ist statisch, weil Sie eine neue Zeichenfolge aus 1-N-Zeichenfolgen erstellen möchten, und sie nicht für eine der Zeichenfolgen aufrufen, die Teil des Anhangs sind.
quelle
quelle
Versuchen Sie stringWithFormat:
quelle
Wenn ich mich oft mit Strings beschäftige, fällt es mir leichter, die Quelldatei ObjC ++ zu erstellen, dann kann ich std :: strings mit der zweiten in der Frage gezeigten Methode verketten.
quelle
Meine bevorzugte Methode ist folgende:
Sie können dies erreichen, indem Sie die Join-Methode mit einer Kategorie zu NSArray hinzufügen:
@[]
es ist die kurze Definition fürNSArray
, ich denke, dies ist die schnellste Methode, um Zeichenfolgen zu verketten.Wenn Sie die Kategorie nicht verwenden möchten, verwenden Sie direkt die
componentsJoinedByString:
Methode:quelle
Sie können NSArray als verwenden
oder
Sie können verwenden
quelle
Jedes dieser Formate funktioniert in XCode7, als ich getestet habe:
Aus irgendeinem Grund benötigen Sie nur das @ -Operatorzeichen in der ersten Zeichenfolge der Mischung.
Es funktioniert jedoch nicht mit variabler Einfügung. Dafür können Sie diese extrem einfache Lösung verwenden, mit der Ausnahme, dass Sie ein Makro für "cat" anstelle von "und" verwenden.
quelle
Für alle Objective C-Liebhaber, die dies in einem UI-Test benötigen:
quelle
quelle
Stellen wir uns vor, Sie wissen nicht, wie viele Saiten es gibt.
quelle