LoginSignup
11
11

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-03-07

「@"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;
}
11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11