Upload
hasegawa
View
455
Download
1
Embed Size (px)
Citation preview
第7回iPhone輪講
Lesson14コレクション
配列
NSArrayとNSMutableArrayCocoaのオブジェクトを入れておくために設計された配列のクラスNSStringのとき同様に2つあるのは,固定長と可変長のもの
NSArray
NSMutableArray
NSObject
配列の作成
1個のオブジェクトを指定して作成
NSArray+ (id)arrayWithObject:(id)objectオブジェクトobjectを指定してインスタンスを作成します
配列の作成
複数のオブジェクトを指定して作成
メソッド名の最後にsがある事に注意複数指定した引数の最後には必ずnilを指定する
NSArray
+ (id)arrayWithObjects:(id)firstObj, ...- (id)initWithObjects:(id)firstObj, ...
複数のオブジェクトを指定してインスタンスを作成.引数の最後にはnilを指定.
配列の大きさ
配列の大きさを調べる
出力結果はcount is 3となる
NSArray- (unsigned)count配列に含まれる要素の数を取得します
インデックスを指定したオブジェクトの取得
インデックスを指定して取り出すC言語の配列でc = names[o];のように,インデックスを指定してオブジェクトを取り出せたNSArrayでもobjectAtindex:というメソッドで取り出せる
インデックスを指定したオブジェクトの取得
thirdObjectは”C”となるインデックスが配列の大きさを超えないようにする事もし超えると例外が発生する
NSArray- (id)objectAtIndex:(unsigned)indexインデックスindexを指定して要素を取得します
インデックスを指定したオブジェクトの取得
objectAtIndex:でアクセスする前にcountを使って配列の大きさをチェックする2より大きいか調べる
for文を利用すれば,配列中のすべてのオブジェクトにアクセスする事ができる
NSEnumeratorを使ったオブジェクトの取得
すべてのオブジェクトにアクセスするために列挙子と呼ばれる考え方があるインデックスを使ってアクセスする場合0番目,1番目,2番目…とオブジェクトにアクセスするまず先頭があって,その先頭から何番目という事でオブジェクトをしていしている
…0
12
n
NSEnumeratorを使ったオブジェクトの取得
列挙子は,まず先頭のオブジェクトを取り出すそしてそのオブジェクトから「その次」のオブジェクトを取り出すさらにその次,その次…と繰り返して行く最後のオブジェクトに到達したら,その次としてnilを返す
… nil
NSEnumeratorを使ったオブジェクトの取得
Cocoaで列挙子を実現するクラスはNSEnumeratorここで提供するメソッドは,「その次」のオブジェクトを取り出すものnextObjectというメソッド
NSObject
NSEnumerator
NSEnumeratorを使ったオブジェクトの取得
NSEnumeratorを取得したら,このメソッドを呼び続けるそれですべてのオブジェクトを取り出せる
これでNSEnumeratorのインスタンスを取得できる
NSEnumerator- (id)nextObject
現在のオブジェクトの次のオブジェクトを取得する
NSArray- (NSEnumerator*)objectEnumerator
列挙子を取得する
NSEnumeratorを使ったオブジェクトの取得
nextObjectメソッドを使いオブジェクトを取り出し,それをstringに代入しているそのstringに何か値が入っていればループは続き,最後のオブジェクトでnilが返ってくればループは終了する
高速列挙を使ったオブジェクトの取得
高速列挙(Fast Enumeration)Objective-C 2.0から追加されたオブジェクトの集合にアクセスするための新しい文法
for文に対して拡張が行われていて,直接配列にアクセスできる文法は for (変数宣言 in オブジェクトの集合) { ... }オブジェクトの集合としては,NSArrayなどが指定できる
オブジェクトの追加と削除
空の配列を作成空の配列を作っておいて,後から尾bジェクトを追加する事もできるこの場合は可変長のNSMutableArrayを使う
NSArray+ (id)array
中身が空のインスタンスを作成する
オブジェクトの追加
オブジェクトを追加するためのメソッドはNSMutableArrayで定義される
NSMutableArray- (void)addObject:(id)objectオブジェクトobjectを追加します- (void)addObjectFormArray:(NSArray*)array配列arrayに含まれるすべてのオブジェクトを追加します- (void)insertObject:(id)object atIndex:(unsigned)indexオブジェクトobjectをインデックスindexに追加します- (void)replaceObjectAtIndex:(unsigned)index; withObject:(id)objectインデックスindexにあるオブジェクトをオブジェクトobjectと置換します- (void)setArray:(NSArray*)arrayすべてのオブジェクトを配列arrayに含まれているオブジェクトと交換します
オブジェクトの削除
「同じ値」はオブジェクトは別で,持っている値が同じもの「同じオブジェクト」はオブジェクトを参照しているという事
NSMutableArray- (void)removeAllObjectすべてのオブジェクトを削除します- (void)removeLastObject最後のオブジェクトを削除します- (void)removeObjectAtIndex:(unsigned)indexインデックスindexにあるオブジェクトを削除します- (void)removeObject:(id)object配列に含まれるオブジェクトで,オブジェクトobjectと同じ値を持つものすべて削除します- (void)removeObjectIdenticalTo:(id)object配列に含まれるオブジェクトで,オブジェクトobjectと同じものすべてを削除します- (void)removeObjectsInArray:(NSArray*)array配列に含まれるオブジェクトで,配列arrayに含まれるオブジェクトと同じ値を持つものをすべて削除します
辞書
辞書とは
「左が項目,右がその説明」こういう構造がプログラミングでは提供されており,辞書または連想配列と呼ばれているこのとき指定するオブジェクトの事をキー,関連づけられたオブジェクトの事を値と呼ぶ例であれば”CPU”がキーで,”Intel Core 2 Duo”が値になる
“CPU” => “Intel Core 2 Duo”“Memory” => “2GB”“Color” => “Black”
NSDictionaryNSMutableDictionary
Cocoaで辞書を実現するのはNSDictionaryと,NSMutableDictionaryというクラス
NSDictionaryは変更できない辞書,NSMutableDictionaryは変更できる辞書
NSDictionary
NSMutableDictionary
NSObject
NSDictionaryの作成
1つのキーペアと値ペアを指定して作成
NSDictionary+ (id)dictionaryWithObject:(id)object forkey:(id)key
値objectとキーkeyを指定して,インスタンスを作成する
NSDictionaryの作成
複数のキーと値のペアを指定して作成
1つ目は配列を使う方法キーの配列と値の配列を別個に作成し,辞書を作る2つ目は可変引数を使う方法このメソッドでは値1,キー1,値2,キー2,...というように値とキーのペアをどんどん並べて行く.最後の値としてnilを指定する
NSDictionary+ (id)dictionaryWithObjects:(NSArray*)object forKeys:(NSArray*)keys- (id)initWithObjects:(NSArray*)objects forKeys:(NSArray*)keys値の配列objectsとキーの配列keysを指定して,インスタンスを作成する+ (id)dictionaryWithObjectsAndKeys:(id)firstObj, ...- (id)initWithObjectsAndKeys:(id)firstObj, ...値とキーのペアを複数指定して,インスタンスを作成する.最後の引数はnilにする
キーと値の取得
キーを指定して値を取得辞書を引くにはキーを指定して,値を取り出さないといけないobjectForKey:というメソッドを使う
NSDictionary- (id)objectForKey:(id)key
キーkeyを指定して,関連づけられている値を取得する.対応する値が無い場合はnilを返す
キーと値の取得
すべてのキー,値を取得辞書に含まれるすべてのキーと値を取得する事もできる
NSDictionary
- (NSArray*)allKeys
すべてのキーを配列の形で取得する
- (NSEnumerator*)keyEnumerator
すべてのキーにアクセスする列挙子を取得する
- (NSArray*)allValues
すべての値を配列の形で取得する
- (NSEnumerator*)objectEnumerator
すべての値にアクセスする列挙子を取得する
キーと値の追加と削除
空の辞書を作成dictionaryというメソッドを使うメソッド自体はNSDictionaryで宣言されている
NSDictionary+ (id)dictionary
中身が空の辞書を作成する
キーと値の追加と削除
キーと値のペアを追加キーを追加するにはsetObject:forKey:というメソッドを使う
どちらの値もnilにならないように注意するもし指定したキーがすでに辞書に含まれていたら上書きされる前の値は削除され,新しい値が設定される
NSMutableDictionary- (void)setObject:(id)Object forKey:(id)key
値objectとキーkeyのペアをインスタンスに追加する
キーと値の追加と削除
キーと値のペアを削除追加したオブジェクトを削除するのは以下のメソッド
NSMutableArray- (void)removeAllobjectsすべてのキーと値のペアを削除する- (void)removeObjectForKey:(id)keyキーkeyと,それに関連づけられているオブジェクトを削除する- (void)removeObjectForKey:(NSArray*)keyArrayキーの配列keyArrayと,それに含まれているキーに関連づけられているオブジェクトを削除する
ラッパークラス
ラッパークラスとはNSArrayやNSDictionaryに入れる事ができるのはオブジェクトになる整数や小数や論理値いった数値は,intやfloatやboolといった基本型を使うオブジェクトではない
ラッパークラスはこれらの基本型を包んでオブジェクトとして扱えるようにするためのクラス
NSNumberCocoaで提供されているラッパークラスはNSNumber
NSNumerにたいする操作は2つだけで事足りる基本型からインスタンスを作るインスタンスから基本型の値を取り出す事
NSValue
NSNumber
NSObject
基本型からインスタンスを作るメソッド
NSNumber- (id)numberWithBool:(BOOL)value- (id)initWithBool:(BOOL)value論理値の型の値valueを指定して,インスタンスを作成する
+ (id)numberWithChar:(char)value- (id)initWithChar:(char)value+ (id)numberWithUnsignedChar:(unsigned char)value- (id)initWithUnsignedChar:(unsigned char)value文字型の値valueを指定して,インスタンスを作成する
+ (id)numberWithInt:(int)value- (id)initWithInt:(int)value+ (id)numberWithUnsignedInt:(unsigned int)value- (id)initWithUnsignedInt:(unsigned int)value+ (id)numberWithLong:(long)value- (id)initWithLong:(long)value+ (id)numberWithUnsignedLong:(unsigned long)value- (id)initWithUnsignedLong:(unsigned long)value
整数型の値valueを指定してインスタンスを作成する
基本型からインスタンスを作るメソッド
NSNumber
+ (id)numberWithFloat:(float)value- (id)initWithFloat:(float)value+ (id)numberWithDouble:(double)value- (id)initWithDouble:(double)value
小数型の値valueを指定してインスタンスを作成する
値を取り出すメソッド
NSNumber- (BOOL)boolValue論理値の値を取得します- (char)charValue- (unsigned char)unsignedCharValue文字型の値を取得します- (int) intValue- (unsgned int)unsignedIntValue- (long)longValue- (unsigned long)unsignedLongValue整数型の値を取得します- (float)floatValue- (double)doubleValue小数型の値を取得します
- (NSString*)stringValue値を文字列にしたものを取得します