NSValue
CGRectやNSRangeなど、NSObjectを継承していない構造体をオブジェクトとして扱いたい場合に使用します。
例えば、CGRectなどの構造体はNSObjectを継承していないため、そのままではNSArrayなどに追加できませんが、NSValue型に変換すれば追加することができるようになります。
NSValueのクラス階層
NSObject
↑
NSValue
NSValue生成
//CGRectのNSValueを生成する例
CGRect rect = CGRectMake(0, 0, 100, 100);
NSValue *val = [NSValue valueWithCGRect:rect];
//CGPointのNSValueを生成する例
CGPoint point = CGPointMake(100, 100);
NSValue *val = [NSValue valueWithCGPoint:point];
//CGSizeのNSValueを生成する例
CGSize size = CGSizeMake(100, 100);
NSValue *val = [NSValue valueWithCGSize:size];
//NSRangeのNSValueを生成する例
NSRange range = NSMakeRange(0, 50);
NSValue *val = [NSValue valueWithRange:range];
NSValueのメソッド
メソッド名 | 説明 |
---|---|
-(CGRect)CGRectValue | NSValueをCGRectとして取得する (例)CGRect r = [val CGRectValue]; |
-(CGPoint)CGPointValue | NSValueをCGPointとして取得する (例)CGPoint p = [val CGPointValue]; |
-(CGSize)CGSizeValue | NSValueをCGSizeとして取得する (例)CGSize s = [val CGSizeValue]; |
主要なメソッドのみ掲載しています。
上記「NSValueのクラス階層」にあるクラスのメソッドも使用できます。
NSValue例文
// CGSize構造体をNSArrayに入れる
NSValue *val1 = [NSValue valueWithCGSize:CGSizeMake(10, 10)];
NSValue *val2 = [NSValue valueWithCGSize:CGSizeMake(20, 20)];
NSValue *val3 = [NSValue valueWithCGSize:CGSizeMake(30, 30)];
NSValue *val4 = [NSValue valueWithCGSize:CGSizeMake(40, 40)];
NSValue *val5 = [NSValue valueWithCGSize:CGSizeMake(50, 50)];
NSArray *ar = [NSArray arrayWithObjects:val1, val2, val3, val4, val5, nil];
上記 ar からCGSizeを取り出すサンプルです。
//3番目のCGSizeを取り出す
NSValue *value = [list objectAtIndex:2];
CGSize sz = [value CGSizeValue];