Edited at

+演算子を用いてNSStringを文字列連結する方法

More than 5 years have passed since last update.

「@"hogehoge" + @"piyopiyo"」する方法です。

Objective-C++使っているので、拡張子をmain.mmみたいな感じにしてあげて下さい。

intとfloatにも対応しているので、「@"fugafuga" + 1 + 2 + 3.14f」で@"fugafuga123.14"になります。

MRCなので、ARCで使う場合はretainとかreleaseとかを適宜端折っちゃって下さい。

おかしいトコの指摘や、intやfloat以外に対応したコードとかを、

gistにpull request頂けたりすると、泣いて喜びますお(*´∀`)


main.mm

//

// main.mm
// ObjCOperatorSample
//
// Created by oden on 13/03/07.
// Copyright (c) 2013年 JITAKUKEIBI INC. All rights reserved.
//

#import <Foundation/Foundation.h>

class ID
{
private:
id object = nil;

public:
ID(const id object = [[[NSObject alloc] init] autorelease])
{
this->object = [object retain];
}

~ID()
{
[this->object release];
this->object = nil;
}

operator id()
{
return this->object;
}

ID operator+(const id object)
{
return [[this->object description] stringByAppendingFormat:@"%@", object];
}

ID operator+(const int i)
{
return [[this->object description] stringByAppendingFormat:@"%@", @(i)];
}

ID operator+(const float f)
{
return [[this->object description] stringByAppendingFormat:@"%@", @(f)];
}

ID& operator+=(ID source)
{
[this->object autorelease];
this->object = [[*this stringByAppendingFormat:@"%@", (id)source] retain];
return *this;
}
};

int main(int argc, const char * argv[])
{
@autoreleasepool
{
// コピーコンストラクタ
ID hoge = @"a";

// operator+
hoge = hoge + @"b";

// operator+=
hoge += @"c";

// 複数のオブジェクトを連結する場合は、最初のオブジェクトをID型にキャストする
hoge += (ID)@"d" + @"efg";

// NSNumberやプリミティブ型にも対応可能
hoge += (ID)@(1) + 2 + 3.14f;

// 暗黙の型変換
id piyo = hoge;

// 明示的型変換
NSLog(@"%@", (id)hoge);
// 結果:abcdef123.14

// 普通に出力
NSLog(@"%@", piyo);
// 結果:abcdef123.14
}

return 0;
}