Cocoa API解説(macOS/iOS)

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。

目次

NSMutableString

INDEX>Foundation

変更可能な文字列クラス

apple(OS X)
apple(iOS)

解説

変更可能な文字列クラスです

継承 NSString : NSObject
準拠 NSCopying (NSString)
  NSMutableCopying (NSString)
  NSSecureCoding (NSString)
  NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X v10.0 以降
iOS 2.0 以降
定義 NSString.h

概要

一旦作成したあと変更が可能な文字列のクラスです。
書体や色などの情報を持った属性付文字列はNSMutableAttributedStringクラスを使います。

C言語フレームワークである、Core FoundationのCFMutableStringRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。

ARC環境では、管理対象のオブジェクトキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。
詳細はNSStringのページを参照してください。


生成と初期化

仮の容量を指定して変更可能な文字列を作成するクラスメソッド(+ stringWithCapacity: )、初期化メソッド(– initWithCapacity)があります。
容量は効率化のためにヒントとして使われ、必要に応じて容量は拡張されます。サイズを制限するものではありません。

NSMutableString *muString = [[NSMutableString alloc] initWithCapacity:0];
[muString appendString:@"Hello!"];

NSMutableStringの上位クラスであるNSStringのメソッドも使えますので、ファイルやURL、フォーマット文字列、C文字列から作成することもできます。

文字列の修正

追加

末尾に文字列を追加して返すメソッド(- appendFormat)や、末尾にフォーマット文字列を追加して返すメソッド(- appendString)があります。

    NSMutableString *muString = [[NSMutableString alloc] initWithCapacity:0];
    [muString appendString:@"Hello"];
    [muString appendString:@"!"];  
    NSLog(@"%s : %@",__FUNCTION__ ,muString);
    //=> -[OOOAppDelegate method002] : Hello!
削除

指定した範囲の文字列を削除するメソッド(- deleteCharactersInRange)があります。
下記の例では、文字列@"abcdefghijklmnopqrstuvexyz"のインデックス5から10文字分が削除されます。
インデックスは0から始まる(この場合のインデックス0の文字は@"a")のでインデックス5の文字は@"f"になり、fから10文字分の@"o"までが削除の範囲となります。
指定する範囲がレシーバの範囲を超える(インデックスが30である場合など)と例外【NSRangeException】が投げられます。

    NSMutableString *muString = [NSMutableString stringWithCapacity:0];
	[muString appendString:@"abcdefghijklmnopqrstuvexyz"];
	[muString deleteCharactersInRange:NSMakeRange(5,10)];
    NSLog(@"%s : %@",__FUNCTION__ ,muString);
    //=> -[OOOAppDelegate method003] : abcdepqrstuvexyz
挿入

指定した位置に文字列を挿入するメソッド(- insertString:atIndex)があります。
下記の例では、文字列@"abcdefghijklmnopqrstuvexyz"のインデックス4の場所(eがある場所)に文字列@"xxxxxxx"が挿入され、abcdxxxxxxxefghijklmnopqrstuvexyzという文字列になります。
挿入する文字列がnilであってはいけません。

    NSMutableString *muString = [NSMutableString stringWithCapacity:0];
    [muString appendString:@"abcdefghijklmnopqrstuvexyz"];
	[muString insertString:@"xxxxxxx" atIndex:4];
    NSLog(@"%s : %@",__FUNCTION__ ,muString);
    //=> -[OOOAppDelegate method004] : abcdxxxxxxxefghijklmnopqrstuvexyz
置き換え

文字列を置き換えるメソッド(- replaceCharactersInRange:withString)、さらに置き換える際にオプションとして正規表現が使えるメソッド(- replaceOccurrencesOfString:withString:options:range)があります。
正規表現についてはNSRegularExpressionクラスを参照してください。

{
    NSMutableString *muString = [[NSMutableString alloc] initWithCapacity:0];
    [muString appendString:@"If into in onto of often on and ON"];
    [muString replaceOccurrencesOfString:@"\\b(i|o)(f|n)\\b" //\\bはスペース(i|o)はiまたはo
                                                     withString:@"$2$1" //2番目の要素が前にきて、1番目の要素があとに来る
                                                        options:NSRegularExpressionSearch 
                                                          range:NSMakeRange(0,[muString length])
                      ];
    NSLog(@"%s : %@",__FUNCTION__ ,muString);
    //=>-[OOOAppDelegate method001] : If into ni onto fo often no and ON

}

作成

使用可能

10.0以降

参照

変更可能文字列の作成と初期化

変更可能文字列を作って返します
  + stringWithCapacity

変更可能な文字列を初期化して返します

  – initWithCapacity

文字列の修正

文字列を指定した書式で末尾に追加します
  – appendFormat

文字列を末尾に追加します
  – appendString

指定した範囲の文字列を削除します
  – deleteCharactersInRange

変更可能な文字列に文字列を指定した位置に挿入します
  – insertString:atIndex

変更可能な文字列の指定した範囲の文字列を別の文字列と置き換えます
  – replaceCharactersInRange:withString

変更可能な文字列の指定した範囲の文字列を別の文字列と置き換えます
  – replaceOccurrencesOfString:withString:options:range

文字列をセットします変更可能な文字列の全ての文字列が置き変わります
  – setString