NSString을 연결하기위한 Objective-C의 바로 가기


1129

stringByAppendingString:Objective-C에서 ( ) 문자열 연결에 대한 단축키 또는 NSString일반적인 작업에 대한 단축키가 있습니까?

예를 들어 다음과 같이 만들고 싶습니다.

NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];

더 같은 것 :

string myString = "This";
string test = myString + " is just a test";

4
연결 연산자로 '@ +'를 제안하고 싶습니다. 다음에 Objective-C, kthxbai
powerj1984

44
@NicolasMiari Objective-C에없는 유일한 기능은 아닙니다. 수십 가지가 있습니다. Jordão 의 링크 에서 인용 한 것은 "Objective-C는 기본 언어 인 둔기입니다. 현대 언어와 비교해 보면 부족한 점이 있습니다." 동의한다. Objective-C (1980 년대 초)는 C (1970 년대 초)이며 매우 단순하지만 형식이 안전하지 않은 OOP를 추가했습니다. 괜찮지 만 Java 또는 C #과 비교할 때 매우 구식입니다.
jcsahnwaldt는 GoFundMonica가

5
@NicolasMiari : 통역 된 언어? C #과 Java는 컴파일 된 언어입니다. 바이트 코드로 컴파일 된 후 머신 코드로 다시 컴파일됩니다.
Joren

3
상황이 바뀌 었습니다 : 스위프트 (애플 새로운 언어)가 더 간단합니다
Pradeep

6
"타입 안전"에 대해서는 스타일 문제라고 생각합니다. C # / C ++에서 온 사람에게는 모든 유형의 이종 객체 배열이 이상하게 보일 수 있지만 Objective-C / Cocoa에 익숙한 사람에게는 역동 성과 자유의 한 형태입니다. 당신이하고있는 것을 아는 것이 유리하다. 요즘 젊은 프로그래머들이 강타하는 C에 관한 모든 것처럼 ...
Nicolas Miari

답변:


616

내가 생각할 수있는 두 가지 대답은 ... 연결 연산자를 갖는 것만 큼 유쾌하지 않습니다.

먼저 메서드 NSMutableString가있는 appendString임시 문자열을 추가로 사용하지 않는를 사용하십시오.

둘째, 방법을 NSArray통해 연결하려면를 사용 하십시오 componentsJoinedByString.


34
다른 옵션에는 많은 투표가 있지만, 건설 할 때 모든 줄을 모른다면 이것이 가장 좋은 대답이라고 생각합니다. 문자열을 추가 할 때마다 많은 오버 헤드가 발생합니다. 변경 가능한 문자열을 사용하면 해당 문제가 해결됩니다.
Eli

22
+1 @Eli에 동의합니다. 이들은 일반적으로 최고의 솔루션입니다. NSArray -componentsJoinedByString은 한 줄로 잘 수행 할 수 있습니다. string = [[NSArray arrayWithObjects : @ "This", "Is", "A", "Test", nil] componentsJoinedByString : @ ""];
Rob Napier

4
이 답변에 +1 [NSMutableString appendString]보다 메모리 친화적 [NSString stringByAppendingStrings]입니다.
Pierre-David Belanger

2
@RobNapier : 이제 새로운 배열 리터럴 구문을 사용하면 훨씬 좋습니다.
Amogh Talpallikar

27
[NSString stringWithFormat:@"%@/%@/%@", three, two, one];기술은 가장 우아해 보입니다. 선택한 답변이어야합니다.
ekillaby 2014

1129

옵션:

[NSString stringWithFormat:@"%@/%@/%@", one, two, three];

다른 옵션 :

여러 추가 (a + b + c + d)에 만족하지 않는다고 생각합니다.이 경우 다음을 수행 할 수 있습니다.

NSLog(@"%@", [Util append:one, @" ", two, nil]); // "one two"
NSLog(@"%@", [Util append:three, @"/", two, @"/", one, nil]); // three/two/one

같은 것을 사용하여

+ (NSString *) append:(id) first, ...
{
    NSString * result = @"";
    id eachArg;
    va_list alist;
    if(first)
    {
        result = [result stringByAppendingString:first];
        va_start(alist, first);
        while (eachArg = va_arg(alist, id)) 
        result = [result stringByAppendingString:eachArg];
        va_end(alist);
    }
    return result;
}

8
@pablasso 동의합니다. Util 메소드는 꽤 추악합니다. 그러한 것을 원한다면 + stringByAppendingStrings :와 같은 이름을 가진 NSString 카테고리로 수행되어야합니다. NSStringForAppendedStrings (...)와 같은 이름을 가진 일직선 함수조차도 Util과 같은 클래스의 정적 메소드보다 낫습니다 (이름에 "Util"이있는 모든 요소는 제대로 고려되지 않습니다). 이 기능은 NSMutableString 및 -appendString으로 더 잘 구현되어 무제한 자동 릴리스 된 NSString 세트를 작성하지 않아도됩니다.
Rob Napier

1
큰 문자열을 사용하면 메모리가 낭비 될 수 있습니다. 실제 프로그래밍 언어에서 StringBuilder와 비슷한 것이 좋습니다. 그런 다음 실제로 추가를 시작하기 전에 필요한 메모리 양을 알아낼 수 있습니다. 이를 위해 위의 접근 방식을 리팩터링 할 수 있습니다. 그러나 StringBuilder 객체를 만드는 것이 좋습니다. 이렇게하면 사용자가 결합해야하는 모든 문자열 목록을 추적하지 않아도됩니다.
George

Util을 어떻게 가져 옵니까? 이 IDE는 더 일식에 같은 "수입 something.Util"제안 좌절 (이다, 나는 "백분율"어디 언급을 찾을 이것은 내가 코드에 자신을 가정하고있어 클래스.?
Gubatron

stringWithFormat은 매우 우아 할뿐만 아니라 훨씬 강력합니다. @ "% @ % @"와 함께 사용하여 두 문자열을 연결하고 @ "% @ % @ % @"를 사용하여 세 문자열을 연결하지만 추가 문자를 안에 넣고 숫자를 인쇄하고 원하는 경우 매개 변수를 다시 정렬 할 수 있습니다 . 형식 문자열을 지역화하여 10 배 더 강력하게 만들 수 있습니다. 문자열 연결은 초보자를위한 것입니다.
gnasher729

150

NSString 리터럴 이 2 개인 경우 다음 과 같이 할 수도 있습니다.

NSString *joinedFromLiterals = @"ONE " @"MILLION " @"YEARS " @"DUNGEON!!!";

#defines에 가입 할 때도 유용합니다.

#define STRINGA @"Also, I don't know "
#define STRINGB @"where food comes from."
#define JOINED STRINGA STRINGB

즐겨.


13
@ CristiBăluță :) 그러나 이것은 동적으로 생성 된 NSString 인스턴스가 아닌 리터럴 에서만 작동 합니다.
Johannes Fahrenkrug

9
실제로 @첫 번째 문자열 이후에 s 가 필요하지 않습니다 . @"I" " really" " enjoy"...
케빈

STRINGA와 STRINGB를 괄호 안에 넣어야합니다. 그렇지 않으면 매크로가 해결 될 때 이상한 결과를 얻을 수 있습니다. #define JOINED (STRINGA STRINGB)
digory doo

@JohannesFahrenkrug 그렇다면 왜 이것이 NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";작동하지 않습니까? 나는 Expected '@' in program오류가 있습니다 :(
Vagif

@Vagif 어떻게 TABLE_NAME정의되어 있습니까?
Johannes Fahrenkrug

75

나는이 게시물로 계속 돌아가서 항상 답변을 정렬하여 필요한만큼 많은 변수로 작동하는이 간단한 솔루션을 찾습니다.

[NSString stringWithFormat:@"%@/%@/%@", three, two, one];

예를 들면 다음과 같습니다.

NSString *urlForHttpGet = [NSString stringWithFormat:@"http://example.com/login/username/%@/userid/%i", userName, userId];

48

메소드를 작성하십시오.

- (NSString *)strCat: (NSString *)one: (NSString *)two
{
    NSString *myString;
    myString = [NSString stringWithFormat:@"%@%@", one , two];
    return myString;
}

그런 다음 필요한 함수에 문자열 또는 텍스트 필드 또는이 함수의 반환 값을 설정하십시오.

또는 바로 가기를 만들려면 NSString을 C ++ 문자열로 변환 한 다음 '+'를 사용하십시오.


가장 간단한 솔루션입니다.
GeneCode

44

콜론 종류의 특수 기호이지만, 글쎄, 방법 서명의 일부, exted에 가능하다 NSString이 추가 카테고리로를 비 관용적 문자열 연결의 스타일 :

[@"This " : @"feels " : @"almost like " : @"concatenation with operators"];

유용하다고 생각되는만큼 콜론으로 구분 된 인수를 정의 할 수 있습니다 ... ;-)

좋은 측정을 위해 종료 된 문자열 목록 concat:을 취하는 변수 인수 도 추가 했습니다 nil.

//  NSString+Concatenation.h

#import <Foundation/Foundation.h>

@interface NSString (Concatenation)

- (NSString *):(NSString *)a;
- (NSString *):(NSString *)a :(NSString *)b;
- (NSString *):(NSString *)a :(NSString *)b :(NSString *)c;
- (NSString *):(NSString *)a :(NSString *)b :(NSString *)c :(NSString *)d;

- (NSString *)concat:(NSString *)strings, ...;

@end

//  NSString+Concatenation.m

#import "NSString+Concatenation.h"

@implementation NSString (Concatenation)

- (NSString *):(NSString *)a { return [self stringByAppendingString:a];}
- (NSString *):(NSString *)a :(NSString *)b { return [[self:a]:b];}
- (NSString *):(NSString *)a :(NSString *)b :(NSString *)c
    { return [[[self:a]:b]:c]; }
- (NSString *):(NSString *)a :(NSString *)b :(NSString *)c :(NSString *)d
    { return [[[[self:a]:b]:c]:d];}

- (NSString *)concat:(NSString *)strings, ...
{
    va_list args;
    va_start(args, strings);

    NSString *s;    
    NSString *con = [self stringByAppendingString:strings];

    while((s = va_arg(args, NSString *))) 
        con = [con stringByAppendingString:s];

    va_end(args);
    return con;
}
@end

//  NSString+ConcatenationTest.h

#import <SenTestingKit/SenTestingKit.h>
#import "NSString+Concatenation.h"

@interface NSString_ConcatenationTest : SenTestCase

@end

//  NSString+ConcatenationTest.m

#import "NSString+ConcatenationTest.h"

@implementation NSString_ConcatenationTest

- (void)testSimpleConcatenation 
{
    STAssertEqualObjects([@"a":@"b"], @"ab", nil);
    STAssertEqualObjects([@"a":@"b":@"c"], @"abc", nil);
    STAssertEqualObjects([@"a":@"b":@"c":@"d"], @"abcd", nil);
    STAssertEqualObjects([@"a":@"b":@"c":@"d":@"e"], @"abcde", nil);
    STAssertEqualObjects([@"this " : @"is " : @"string " : @"concatenation"],
     @"this is string concatenation", nil);
}

- (void)testVarArgConcatenation 
{
    NSString *concatenation = [@"a" concat:@"b", nil];
    STAssertEqualObjects(concatenation, @"ab", nil);

    concatenation = [concatenation concat:@"c", @"d", concatenation, nil];
    STAssertEqualObjects(concatenation, @"abcdab", nil);
}

20
나는 아주 좋은 대답이 아니기 때문에 1 년 전에 이것을 하향 투표했습니다. 많은 수의 문자열을 연결하는 데 대처하기 위해 Palimondo의 구현에는 매우 유사하게 보이는 많은 수의 메소드를 구현하거나 메소드를 여러 번 호출하여 본질적으로 문자열을 연결하는 코드가 많이 필요합니다. 이 방법을 사용하면 간단한 것보다 이점을 얻지 못합니다 stringWithFormat:. 비표준뿐만 아니라 혼란스러운 명명 된 매개 변수의 부족은 말할 것도 없습니다.
FreeAsInBeer 12

2
최초의 질문자는을 언급 stringByAppendingString했으며, 두 가지 이상의 주장을 사용하는 것에 대해 아무 말도하지 않았습니다. 나는이 대답이 허용 된 것보다 낫습니다. 꽤 영리합니다.
sudo

32

stringByAppendingString:이 방법을 사용하십시오 :

NSString *string1, *string2, *result;

string1 = @"This is ";
string2 = @"my string.";

result = [result stringByAppendingString:string1];
result = [result stringByAppendingString:string2];

또는

result = [result stringByAppendingString:@"This is "];
result = [result stringByAppendingString:@"my string."];

34
그가 원하지 않는 정확한 것을 제안하고 있다는 것을 알고 있습니까?
SilverSideDown

너무 많은 누출!
RamGrg

30

매크로 :

// stringConcat(...)
//     A shortcut for concatenating strings (or objects' string representations).
//     Input: Any number of non-nil NSObjects.
//     Output: All arguments concatenated together into a single NSString.

#define stringConcat(...) \
    [@[__VA_ARGS__] componentsJoinedByString:@""]

테스트 사례 :

- (void)testStringConcat {
    NSString *actual;

    actual = stringConcat(); //might not make sense, but it's still a valid expression.
    STAssertEqualObjects(@"", actual, @"stringConcat");

    actual = stringConcat(@"A");
    STAssertEqualObjects(@"A", actual, @"stringConcat");

    actual = stringConcat(@"A", @"B");
    STAssertEqualObjects(@"AB", actual, @"stringConcat");

    actual = stringConcat(@"A", @"B", @"C");
    STAssertEqualObjects(@"ABC", actual, @"stringConcat");

    // works on all NSObjects (not just strings):
    actual = stringConcat(@1, @" ", @2, @" ", @3);
    STAssertEqualObjects(@"1 2 3", actual, @"stringConcat");
}

대체 매크로 : (최소 개수의 인수를 적용하려는 경우)

// stringConcat(...)
//     A shortcut for concatenating strings (or objects' string representations).
//     Input: Two or more non-nil NSObjects.
//     Output: All arguments concatenated together into a single NSString.

#define stringConcat(str1, str2, ...) \
    [@[ str1, str2, ##__VA_ARGS__] componentsJoinedByString:@""];

2
잠시 동안이 질문을 확인하지는 않았지만이 세월이 지난 후에이 질문을 정답으로 받아들이려고합니다.
typeoneerror

1
이것은 또한 -[NSString stringByAppendingString:]이 유스 케이스 보다 더 나은 동작을 가지고 있습니다. 전자는 인수가 nil있지만 수신자가 아닌 경우 예외를 얻습니다 . 따라서 문자열 피더의 실수로 인한 자동 실패 확률은 50 %이며 예외 상황에서는 50 %입니다. 함께 stringConcat하면 어떤에서 예외를 보장하고 nil어디 목록에서. 적어도 어느 것이 더 예측 가능합니다.
Tommy

27

웹 서비스에 대한 요청을 작성할 때 다음과 같은 작업이 매우 쉽고 Xcode에서 연결을 읽을 수있게합니다.

NSString* postBody = {
    @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
    @"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
    @" <soap:Body>"
    @"  <WebServiceMethod xmlns=\"\">"
    @"   <parameter>test</parameter>"
    @"  </WebServiceMethod>"
    @" </soap:Body>"
    @"</soap:Envelope>"
};

objective-c noob의 경우이 구문이 무엇을하는지 설명 할 수 있습니까? 이것이 문자열 배열을 생성하고 어떻게 든 결합합니까? 모든 문서에 대한 참조도 멋질 것입니다.
Norman H

2
@NormanH : 이것은 실제로 C 언어의 일부입니다. 조금 파고 난 후에, 나는 이것을 찾을 수 있었다 . "문자열 연결"단계에 나와 있습니다. 모든 인접한 문자열 및 넓은 문자열 리터럴이 연결됩니다. 예를 들어 "문자열" "연결"은 "문자열 연결"이됩니다.
FreeAsInBeer

27

AppendString (AS) 매크로를 생성하여 바로 가기 ...

#define AS (A, B) [(A) stringByAppendingString : (B)]
NSString * myString = @ "This"; NSString * test = AS (myString, @ "은 테스트 일뿐입니다");

노트 :

매크로를 사용하는 경우 물론 가변 변수 인수로 매크로를 수행하는 경우 EthanB의 답변을 참조하십시오.


멋있는! 여전히 위의 유틸리티는 훨씬 더 우아한 솔루션이라고 생각합니다. 이 매크로에 하나의 문자열 만 추가 할 수 있습니다.
typeoneerror

1
사실, 위의 AS 매크로는 코드 줄당 하나의 추가를 수행합니다. 여러 개의 추가가 일반적으로 필요한 경우 더 많은 매크로를 작성할 수 있습니다. 예를 들어, 두 문자열을 추가하는 매크로 : <pre> #define A2S (A, B, C) [[(A) stringByAppendingString : (B)] stringByAppendingString : (C)] </ pre>

2
또는 "#define AS stringByAppendingString"과 같은 매크로를 사용하여 필요한 타이핑을 줄인 다음 일반적으로 "stringByAppendingString"을 입력하는 "AS"를 사용하고 코드 줄당 여러 개의 추가를 즐기십시오.

15
이러한 매크로의 문제점은 Objective-C의 주요 목표 중 하나 인 가독성이라는 개념을 훼손한다는 것입니다. "AS"가 무엇을하는지는 매우 불분명합니다. 가독성을 희생하면서 몇 번의 키 입력 (대부분 자동 완성으로 처리)을 저장하는 것은 좋은 절충안이 아닙니다. 예외는 있지만 (@ ""구문은 + stringWithUTF8String : 매번 사용하는 것보다 훨씬 읽기 쉽습니다.) 목표는 단순함보다는 여전히 가독성이어야합니다. 한 번 작성하지만 영원히 디버깅합니다.
Rob Napier

안녕 롭-나는 이것에 당신과 동의 할 수 없습니다. 물론 "AS"는 나쁜 이름입니다. 아마도 "CAT"로 명명되어야합니다.
Fattie

13
NSString *label1 = @"Process Name: ";
NSString *label2 = @"Process Id: ";
NSString *processName = [[NSProcessInfo processInfo] processName];
NSString *processID = [NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]];
NSString *testConcat = [NSString stringWithFormat:@"%@ %@ %@ %@", label1, processName, label2, processID];

11

새로운 배열 리터럴 구문을 사용하는 간단한 방법은 다음과 같습니다.

NSString * s = [@[@"one ", @"two ", @"three"] componentsJoinedByString:@""];
                  ^^^^^^^ create array ^^^^^
                                               ^^^^^^^ concatenate ^^^^^

9
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];

Objective CI를 사용하여 2 년이 지난 후에는 이것이 Objective C와 협력하여 달성하려는 목표를 달성하는 가장 좋은 방법이라고 생각합니다.

Xcode 애플리케이션에서 "N"을 입력하면 "NSString"으로 자동 완성됩니다. "str"을 입력하면 "stringByAppendingString"으로 자동 완성됩니다. 따라서 키 입력은 상당히 제한적입니다.

"@"키를 누르고 읽을 수있는 코드를 작성하는 과정을 중단하면 더 이상 문제가되지 않습니다. 적응의 문제 일뿐입니다.


그가 원하지 않는 정확한 것을 제안하고 있다는 것을 알고 있습니까?
사용자가 아닌 사용자

8

c = [a stringByAppendingString: b]더 짧게 만드는 유일한 방법 은 자동 완성 기능을 사용하는 것 st입니다. +운영자는 목표 - C 객체에 대해 알고하지 않는 C의 일부입니다.


그가 원하지 않는 정확한 것을 제안하고 있다는 것을 알고 있습니까? 최소한 a를 #define사용하여 단축시킬 수 있습니다.
사용자가 아닌 사용자

8

어떻게 단축에 대한 stringByAppendingString과 사용 # 정의 :

#define and stringByAppendingString

따라서 다음을 사용합니다.

NSString* myString = [@"Hello " and @"world"];

문제는 두 개의 문자열에서만 작동한다는 것입니다. 더 많은 추가를 위해 추가 괄호를 감싸 야합니다.

NSString* myString = [[@"Hello" and: @" world"] and: @" again"];

XCode7에서는 더 이상이 옵션을 사용할 수 없습니다. "and"는 예약어입니다. 그러나 연결에 "cat"을 대신 사용할 수 있습니다. 나는 당신의 솔루션이 완벽하게 작동하고 매우 간단합니다.
Volomike

8
NSString *result=[NSString stringWithFormat:@"%@ %@", @"Hello", @"World"];

7
NSString *label1 = @"Process Name: ";
NSString *label2 = @"Process Id: ";
NSString *processName = [[NSProcessInfo processInfo] processName];
NSString *processID = [NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]];
NSString *testConcat = [NSString stringWithFormat:@"%@ %@ %@ %@", label1, processName, label2, processID];

6

이 코드를 시도했습니다. 그것은 나를 위해 일했다.

NSMutableString * myString=[[NSMutableString alloc]init];
myString=[myString stringByAppendingString:@"first value"];
myString=[myString stringByAppendingString:@"second string"];

2
이것은 NSMutableString의 최악의 남용입니다. NSMutableString의 요점은 자동 릴리스 된 문자열을 작성하는 메소드가 필요하지 않지만 문자열 자체를 수정할 수 있다는 것입니다.
gnasher729

동의하다. 를 사용하는 appendString:경우 최소한 사용 하십시오 NSMutableString.
사용자가 아닌 사용자

6

lldb창 에서 다음을 시도하고있었습니다.

[NSString stringWithFormat:@"%@/%@/%@", three, two, one];

어떤 오류.

대신 alloc과 initWithFormatmethod 를 사용하십시오 .

[[NSString alloc] initWithFormat:@"%@/%@/%@", @"three", @"two", @"one"];

1
... 저는 논평하기에 충분한 평판을 얻었지만 이것이 다른 누군가에게 도움이되기를 바랍니다.
Anthony De Souza

4

이것은 dicius 우수한 다중 인수 방법을 기반으로 더 나은 로깅 및 로깅 전용입니다. Logger 클래스를 정의하고 다음과 같이 호출합니다.

[Logger log: @"foobar ", @" asdads ", theString, nil];

var 인수를 "nil"로 끝내는 것을 제외하고는 거의 좋지만 Objective-C에는 그 주위에 방법이 없다고 가정합니다.

Logger.h

@interface Logger : NSObject {
}
+ (void) log: (id) first, ...;
@end

Logger.m

@implementation Logger

+ (void) log: (id) first, ...
{
    // TODO: make efficient; handle arguments other than strings
    // thanks to @diciu http://stackoverflow.com/questions/510269/how-do-i-concatenate-strings-in-objective-c
    NSString * result = @"";
    id eachArg;
    va_list alist;
    if(first)
    {
        result = [result stringByAppendingString:first];
        va_start(alist, first);
        while (eachArg = va_arg(alist, id)) 
        {
            result = [result stringByAppendingString:eachArg];
        }
        va_end(alist);
    }
    NSLog(@"%@", result);
}

@end 

문자열을 연결 하기 위해 NSString에서 Category를 정의하고 문자열을 반환하는 것을 제외하고는 위의 로그 방법과 똑같은 정적 (+) 연결 방법을 추가했습니다. 문자열 메서드이기 때문에 NSString에 있으며 1-N 문자열에서 새 문자열을 만들고 싶지만 추가의 일부인 문자열 중 하나에서 호출하지 않기 때문에 정적입니다.


4
NSNumber *lat = [NSNumber numberWithDouble:destinationMapView.camera.target.latitude];
NSNumber *lon = [NSNumber numberWithDouble:destinationMapView.camera.target.longitude];
NSString *DesconCatenated = [NSString stringWithFormat:@"%@|%@",lat,lon];

3

stringWithFormat을 사용해보십시오.

NSString *myString = [NSString stringWithFormat:@"%@ %@ %@ %d", "The", "Answer", "Is", 42];

여기에 왜 2 개의 다운 보트가 있습니까? 다른 답변에서 이미 언급 되었기 때문입니까?
Reimius

3

문자열을 다룰 때 소스 파일을 ObjC ++로 만드는 것이 더 쉽다는 것을 알게되면 질문에 표시된 두 번째 방법을 사용하여 std :: strings를 연결할 수 있습니다.

std::string stdstr = [nsstr UTF8String];

//easier to read and more portable string manipulation goes here...

NSString* nsstr = [NSString stringWithUTF8String:stdstr.c_str()];

3

내가 선호하는 방법은 다음과 같습니다.

NSString *firstString = @"foo";
NSString *secondString = @"bar";
NSString *thirdString = @"baz";

NSString *joinedString = [@[firstString, secondString, thirdString] join];

카테고리를 사용하여 NSArray에 join 메소드를 추가하여이를 달성 할 수 있습니다.

#import "NSArray+Join.h"
@implementation NSArray (Join)
-(NSString *)join
{
    return [self componentsJoinedByString:@""];
}
@end

@[]에 대한 짧은 정의입니다 NSArray. 문자열을 연결하는 가장 빠른 방법이라고 생각합니다.

범주를 사용하지 않으려면 다음 componentsJoinedByString:방법을 직접 사용하십시오 .

NSString *joinedString = [@[firstString, secondString, thirdString] componentsJoinedByString:@""];

3

NSArray를 다음과 같이 사용할 수 있습니다

NSString *string1=@"This"

NSString *string2=@"is just"

NSString *string3=@"a test"  

NSArray *myStrings = [[NSArray alloc] initWithObjects:string1, string2, string3,nil];

NSString *fullLengthString = [myStrings componentsJoinedByString:@" "];

또는

당신이 사용할 수있는

NSString *imageFullName=[NSString stringWithFormat:@"%@ %@ %@.", string1,string2,string3];

1

테스트 할 때 이러한 형식 중 하나가 XCode7에서 작동합니다.

NSString *sTest1 = {@"This" " and that" " and one more"};
NSString *sTest2 = {
  @"This"
  " and that"
  " and one more"
};

NSLog(@"\n%@\n\n%@",sTest1,sTest2);

어떤 이유로, 믹스의 첫 번째 문자열에는 @ 연산자 문자 만 필요합니다.

그러나 변수 삽입에서는 작동하지 않습니다. 이를 위해 "and"대신 "cat"에 매크로를 사용하는 것을 제외 하고이 매우 간단한 솔루션 을 사용할 수 있습니다 .


이것을 만드는 방법? 예 : sTest3 = sTest1 + sTest2;

@ user285594 문제의 핵심은 Objective-C에서 구문이 허용되지 않는다는 것입니다. 다른 답변을 참조하십시오.
사용자가 아닌 사용자

1

UI-Test에서 이것을 필요로하는 모든 Objective C 애호가에게 :

-(void) clearTextField:(XCUIElement*) textField{

    NSString* currentInput = (NSString*) textField.value;
    NSMutableString* deleteString = [NSMutableString new];

    for(int i = 0; i < currentInput.length; ++i) {
        [deleteString appendString: [NSString stringWithFormat:@"%c", 8]];
    }
    [textField typeText:deleteString];
}

0
listOfCatalogIDs =[@[@"id[]=",listOfCatalogIDs] componentsJoinedByString:@""];

0

거기에 얼마나 많은 문자열이 있는지 모른다고 상상해 봅시다.

NSMutableArray *arrForStrings = [[NSMutableArray alloc] init];
for (int i=0; i<[allMyStrings count]; i++) {
    NSString *str = [allMyStrings objectAtIndex:i];
    [arrForStrings addObject:str];
}
NSString *readyString = [[arrForStrings mutableCopy] componentsJoinedByString:@", "];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.