NSString을 연결하기 위한 Objective-C 바로 가기
「 「 「 「 」 「 」 )의 ?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";
옵션:
[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;
}
내가 생각할 수 있는 두 가지 답은...둘 다 단순히 연결 연산자를 갖는 것만큼 즐겁지 않다.
먼저'를 ,NSMutableString에는)가 .appendString방법, 추 method임 method method method method method method method method method method method method method method method.
번째, '어느 정도'를 사용하세요.NSArraycomponentsJoinedByString★★★★★★ 。
2개의 NSString 리터럴이 있는 경우는, 다음의 조작도 실행할 수 있습니다.
NSString *joinedFromLiterals = @"ONE " @"MILLION " @"YEARS " @"DUNGEON!!!";
이는 #defines에 가입하는 경우에도 유용합니다.
#define STRINGA @"Also, I don't know "
#define STRINGB @"where food comes from."
#define JOINED STRINGA STRINGB
즐거운 시간 되세요.
이 게시물로 계속 돌아가면 필요한 만큼 많은 변수를 처리하는 간단한 솔루션을 찾기 위해 항상 답변을 정리합니다.
[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
예를 들어 다음과 같습니다.
NSString *urlForHttpGet = [NSString stringWithFormat:@"http://example.com/login/username/%@/userid/%i", userName, userId];
메서드를 만듭니다.
- (NSString *)strCat: (NSString *)one: (NSString *)two
{
NSString *myString;
myString = [NSString stringWithFormat:@"%@%@", one , two];
return myString;
}
그런 다음 필요한 함수에서 문자열 또는 텍스트 필드 또는 기타 모든 값을 이 함수의 반환 값으로 설정합니다.
또는 바로 가기를 만들려면 NSString을 C++ 문자열로 변환하고 여기에 '+'를 사용합니다.
콜론은 일종의 특별한 기호이지만 방법 서명의 일부이기 때문에, 콜론은 확장될 수 있습니다NSString카테고리를 지정하여 이 비자동 문자열 연결 스타일을 추가합니다.
[@"This " : @"feels " : @"almost like " : @"concatenation with operators"];
콜론으로 구분된 인수를 필요한 만큼 정의할 수 있습니다.;-)
척도로 for은척 for, added added added added added 했습니다.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);
}
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."];
매크로:
// 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:@""];
웹 서비스에 대한 요청을 작성할 때 다음과 같은 작업을 수행하는 것이 매우 쉬우며 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>"
};
Append String(AS) " " " "...
#) AS(A,B) [(A) stringByAppendingString:(B)]
NSString *myString = @"This"; NSString *test = AS ( myString , @ " @ " ),
주의:
매크로를 사용하고 있는 경우는, 물론, 다양한 인수를 사용해 실행해 주세요.EthanB의 답변을 참조해 주세요.
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];
새로운 어레이 리터럴 구문을 사용하는 간단한 방법은 다음과 같습니다.
NSString * s = [@[@"one ", @"two ", @"three"] componentsJoinedByString:@""];
^^^^^^^ create array ^^^^^
^^^^^^^ concatenate ^^^^^
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
Objective C에서 몇 년을 일한 후, 저는 이것이 Objective C에서 여러분이 달성하고자 하는 것을 달성하기 위한 가장 좋은 방법이라고 생각합니다.
Xcode 어플리케이션에서 "N" 키를 누르면 "NSString"으로 자동 보완됩니다.str을 입력하면 stringByAppendingString으로 자동 보완됩니다.그래서 키 입력이 상당히 제한적입니다.
일단 당신이 "@" 키를 누르고 읽을 수 있는 코드를 쓰는 과정을 익히면, 더 이상 문제가 되지 않습니다.그것은 단지 적응의 문제이다.
「 」를 만드는 c = [a stringByAppendingString: b]합니다.st, 포인트.+객관적-C로 하다
짧게 하는 건 어때?stringByAppendingString#syslog를 사용합니다.
#define and stringByAppendingString
다음과 같이 사용할 수 있습니다.
NSString* myString = [@"Hello " and @"world"];
문제는 두 문자열에서만 작동한다는 것입니다. 추가 추가에 사용할 수 있도록 추가 괄호를 묶어야 합니다.
NSString* myString = [[@"Hello" and: @" world"] and: @" again"];
NSString *result=[NSString stringWithFormat:@"%@ %@", @"Hello", @"World"];
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];
난 이 코드를 시도했다.나한테는 효과가 있었어
NSMutableString * myString=[[NSMutableString alloc]init];
myString=[myString stringByAppendingString:@"first value"];
myString=[myString stringByAppendingString:@"second string"];
'다 하다'에서 다음을 .lldb " " pane pane"
[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
어떤 에러인지.
와 allocate를 합니다.initWithFormat★★★★
[[NSString alloc] initWithFormat:@"%@/%@/%@", @"three", @"two", @"one"];
이는 우수한 다중 인수 방식을 기반으로 로깅을 개선하고 로깅만 하기 위한 것입니다.Logger 클래스를 정의하고 다음과 같이 부릅니다.
[Logger log: @"foobar ", @" asdads ", theString, nil];
varar args를 nil로 끝내는 것 빼고는 거의 괜찮지만 Objective-C에서는 그것을 피할 방법이 없을 것 같습니다.
Logger.h
@interface Logger : NSObject {
}
+ (void) log: (id) first, ...;
@end
로거
@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에서 카테고리를 정의하고 위의 로그 메서드와 동일한 정적(+) 연결 메서드를 추가합니다.단, 문자열은 반환됩니다.이것은 문자열 메서드이기 때문에 NSString에 있으며, 추가 문자열 중 하나에서 호출하지 않고 1-N 문자열에서 새 문자열을 생성하려고 하기 때문에 스태틱합니다.
NSNumber *lat = [NSNumber numberWithDouble:destinationMapView.camera.target.latitude];
NSNumber *lon = [NSNumber numberWithDouble:destinationMapView.camera.target.longitude];
NSString *DesconCatenated = [NSString stringWithFormat:@"%@|%@",lat,lon];
stringWithFormat 시도:
NSString *myString = [NSString stringWithFormat:@"%@ %@ %@ %d", "The", "Answer", "Is", 42];
문자열을 다룰 때 소스 파일을 ObjC++로 만드는 것이 더 쉽다는 것을 알게 되면 질문의 두 번째 방법을 사용하여 std:: 문자열을 연결할 수 있습니다.
std::string stdstr = [nsstr UTF8String];
//easier to read and more portable string manipulation goes here...
NSString* nsstr = [NSString stringWithUTF8String:stdstr.c_str()];
바람직한 방법은 다음과 같습니다.
NSString *firstString = @"foo";
NSString *secondString = @"bar";
NSString *thirdString = @"baz";
NSString *joinedString = [@[firstString, secondString, thirdString] join];
NSArray에 가입 방식을 카테고리와 함께 추가하면 이를 실현할 수 있습니다.
#import "NSArray+Join.h"
@implementation NSArray (Join)
-(NSString *)join
{
return [self componentsJoinedByString:@""];
}
@end
@[]NSArray이것이 문자열을 연결하는 가장 빠른 방법이라고 생각합니다.
「」를 사용해 주세요.componentsJoinedByString:★★★★
NSString *joinedString = [@[firstString, secondString, thirdString] componentsJoinedByString:@""];
NSAray는 다음과 같이 사용할 수 있습니다.
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];
테스트했을 때는, 다음의 몇개의 포맷이 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」에 매크로를 사용하는 것을 제외하고, 지극히 심플한 솔루션을 사용할 수 있습니다.
UI 테스트에서 이것이 필요한 모든 목표 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];
}
listOfCatalogIDs =[@[@"id[]=",listOfCatalogIDs] componentsJoinedByString:@""];
현이 몇 개인지 모른다고 가정해 봅시다.
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:@", "];
영감을 받아NSMutableString크리스의 아이디어, 완벽한 매크로 임호를 만듭니다.예외 없이 0 요소 삽입을 지원합니다.
#import <libextobjc/metamacros.h>
#define STR_CONCAT(...) \
({ \
__auto_type str__ = [NSMutableString string]; \
metamacro_foreach_cxt(never_use_immediately_str_concatify_,, str__, __VA_ARGS__) \
(NSString *)str__.copy; \
})
#define never_use_immediately_str_concatify_(INDEX, CONTEXT, VAR) \
[CONTEXT appendString:VAR ?: @""];
예:
STR_CONCAT(@"button_bg_", @(count).stringValue, @".png");
// button_bg_2.png
괜찮으시다면,id를 사용하여 파라미터로 입력하다[VAR description]대신NSString.
언급URL : https://stackoverflow.com/questions/510269/shortcuts-in-objective-c-to-concatenate-nsstrings
'programing' 카테고리의 다른 글
| 수식만 사용하여 Excel에서 고유한 값 가져오기 (0) | 2023.04.14 |
|---|---|
| 열의 행을 Excel의 한 셀로 병합하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
| IEnumberable 컬렉션에 항목을 추가하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
| git clone --mirror와 git clone --bare의 차이점은 무엇입니까? (0) | 2023.04.09 |
| BooleanToVisibilityConverter를 반전하려면 어떻게 해야 합니까? (0) | 2023.04.09 |