検索
連載

変数のデータ型や文字列の扱いを理解しようCocoaの素、Objective-Cを知ろう(4)(3/3 ページ)

iPhone用アプリケーション開発で注目を集める言語「Objective-C」。C++とは異なるC言語の拡張を目指したこの言語の基本を理解しよう(編集部)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

可変の文字列

 NSStringクラスの場合、そのインスタンスが保持する値(文字列)を直接変更することができません。先ほどのコード例で文字列の操作にかかわるメソッドをいくつか紹介しましたが、これらはすべて、インスタンスの値を直接変更するわけではなく、処理結果を新たな文字列オブジェクトとして返しています。

 文字列を直接操作して変更を加えたい場合には、NSMutableStringクラスを利用します。Objective-Cのライブラリでは、こういった「NSXxxx」と「NSMutableXxxx」といったクラスの組み合わせをしばしば見掛けます。これらはすべて、変更不可のクラスと変更可能なクラスの組み合わせとなっています。

 NSMutableStringの利用例を見てみましょう。

#import <Foundation/NSObject.h>
#import <stdio.h>
int main(void) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  //(1)文字列の生成
  NSMutableString *mStr1 = [NSMutableString stringWithString:@"あいうえお"];
  NSMutableString *mStr2 = [NSMutableString stringWithCString:"かきくけこ" encoding:NSUTF8StringEncoding];
  NSMutableString *mStr3 = [NSMutableString stringWithFormat:@"%@ の次は %@", mStr1, mStr2];
  //(2)文字列をセット(値をまるごと入れ替える)
  [mStr1 setString:@"ABCDE"];
  //(3)末尾に文字列を追加
  [mStr3 appendString:@"さしすせそ"];
  [mStr3 appendFormat:@" の次は %@", @"たちつてと です。"];
  //(4)指定位置に文字列を挿入
  [mStr3 insertString:@" です。" atIndex:15];
  //(5)指定範囲の文字列を置換
  [mStr3 replaceCharactersInRange:NSMakeRange(7, 1) withString:@"あと"];
  //(6)指定範囲の文字列を削除
  [mStr3 deleteCharactersInRange:NSMakeRange(17, 19)];
  printf("mStr1 : %s\n", [mStr1 UTF8String]);
  printf("mStr2 : %s\n", [mStr2 UTF8String]);
  printf("mStr3 : %s\n", [mStr3 UTF8String]);
  [pool drain];
  return 0;
}
main.m

 NSMutableStringはNSStringのサブクラスなので、NSStringのメソッドをそのまま利用することができます。上記(1)のインスタンスの生成で使っているメソッドは、NSStringのコード例で紹介したものと同じです。

 上記(2)〜(6)の「文字列の操作」では、NSMutableString独自のメソッドを紹介しています。1つ前のコード例で示したNSStringの文字列操作メソッドと比較してみてください。NSStringのメソッド群が、処理後の文字列を新たなオブジェクトとして返しているのに対し、NSMutableStringのメソッドでは、その主体となるインスタンスそのものに変更が加えられていることが分かります。

 (2)のメソッドはNSMutableStringのインスタンスが表す値(文字列)を新たにセットします。(3)の2つのメソッドは、ともに末尾に文字列を付加します。(4)は、指定したインデックスの位置に文字列を挿入します。(5)と(6)は先ほど紹介したNSRange構造体で範囲を指定して、文字列の一部を置換または削除します。

 今回はプログラミングの定番要素の前編として、変数のデータ型や文字列の扱いについて解説しました。次回は配列の話を中心に、値の集合を扱う方法について解説する予定です。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る