Foundation(数値)

2010. 04. 09
サンプルコードを載せているのはいいんですが、実行結果が載っていないので正しいのかどうかも判断つかない上に、存在しないメソッドが書かれてたりと難儀している今日この頃です。

●数値のクラス図

FoundationCore Foundation
NSDecimalNumberHandler-
NSNullCFNull
NSValueNSNumberNSDecimalNumber-CFNumber-
NSValueTransformer-


// 整数値オブジェクトの作成
NSNumber *intNumber = [NSNumber numberWithInt:72];

// 小数値オブジェクトの作成
NSNumber *floatNumber = [NSNumber numberWithFloat:9393.0f];

// 論理値オブジェクトの作成
NSNumber *boolNumber = [NSNumber numberWithBool:YES];

// 文字オブジェクトの作成
NSNumber *charNumber = [NSNumber numberWithChar:'A'];

// オブジェクトの出力
NSLog([NSString stringWithFormat:@"int = %d, float = %f, bool = %d, char = %c", [intNumber intValue], [floatNumber floatValue], [boolNumber boolValue], [charNumber charValue]]);
//    int = 72, float = 9393.000000, bool = 1, char = A

新版の『iPhone SDK 3 プログラミング大全』では修正されているのかもしれませんが、手元の旧版(第1版第2刷)ではnumberWithChar:の引数が『'c'』と『''』で囲むところ、『c』になっていました。

・numberWithInt:

+ (NSNumber *)numberWithInt:(int)value

指定したint値(符号有り整数)のNSNumberオブジェクトを作成し、返します

value:int値を指定します


・numberWithFloat:

+ (NSNumber *)numberWithFloat:(float)value

指定したfloat値(浮動小数点実数)のNSNumberオブジェクトを作成し、返します

value:float値を指定します


・numberWithBool:

+ (NSNumber *)numberWithBool:(BOOL)value

指定したBOOL値のNSNumberオブジェクトを作成し、返します

value:BOOL値を指定します


・numberWithChar:

+ (NSNumber *)numberWithChar:(char)value

指定したchar値(符号有り文字)のNSNumberオブジェクトを作成し、返します

value:char値を指定します


・intValue

- (int)intValue

レシーバのNSNumberオブジェクトをint値にして返します

・floatValue

- (float)floatValue

レシーバのNSNumberオブジェクトをfloat値にして返します

・boolValue

- (BOOL)boolValue

レシーバのNSNumberオブジェクトをBOOL値にして返します

・charValue

- (char)charValue

レシーバのNSNumberオブジェクトをchar値にして返します


// 範囲を表すオブジェクトを作成
NSValue *rngValue = [NSValue valueWithRange:NSMakeRange(72, 91)];

// 前後の空白文字を削除
NSLog([NSString stringWithFormat:@"Location = %d, Length = %d", [rngValue rangeValue].location, [rngValue rangeValue].length]);

//    Location = 72, Length = 91

新版の『iPhone SDK 3 プログラミング大全』では修正されているのかもしれませんが、手元の旧版(第1版第2刷)ではvalueWithRange:で作るオブジェクト名が『rangeValue』でした。
コンパイルで警告が出るわけではありませんが、同名のメソッドがあるのでそのような命名は控えた方がいいと思います。


・valueWithRange:

+ (NSValue *)valueWithRange:(NSRange)range

指定したNSRange構造体のNSValueオブジェクトを作成し、返します

range:NSRange構造体の範囲を指定します


・rangeValue

- (NSRange)rangeValue

レシーバのNSValueオブジェクトをNSRange構造体にして返します


// 空の配列を作成し、NULLで初期化します
NSMutableArray *nullArray = [NSMutableArray array];
[nullArray addObject:[NSNull null]];
[nullArray addObject:[NSNull null]];

// 配列の要素数と中身を出力します
NSLog([NSString stringWithFormat:@"Count = %d, [0] = %@", [nullArray count], [nullArray objectAtIndex:0]]);
//    Count = 2, [0] = <null>

新版の『iPhone SDK 3 プログラミング大全』では修正されているのかもしれませんが、手元の旧版(第1版第2刷)ではnullオブジェクトの追加を『appendObject:』というメソッドで行っていますが、正しくは『addObject:』です。


・array

+ (id)array

空の配列を作成し、返します

このメソッドはNSArrayの可変サブクラスであるNSMutableArrayクラスで使用されます


・addObject:

- (void)addObject:(id)anObject

レシーバの配列の最後に指定したオブジェクトを挿入します

anObject:レシーバの配列の最後に追加するオブジェクトを指定します
この値はnilを指定できません

nilを指定した場合は、NSInvalidArgumentExceptionが呼び出されます


・count

- (NSUInteger)count

レシーバの配列の要素数を返します


※ nilとNSNullの違い(注:初心者が調べたことなので間違っているかもしれません

addObject:メソッドで、『nilを指定できない』ので『NSNull(のインスタンス)』を指定しています。

今まで漠然と『空を意味するもの』として、両者の区別を意識していませんでした。

詳解 Objective-C 2.0』によると、nilは『id型の空ポインタで値は0』で、『存在しないオブジェクトを指すポインタ』と書いてあります。

id型のポインタなので、インスタンス生成時にポインタの初期化で用いられるのですが、配列(NSArray)や辞書(NSDictionary)の初期化で使う事は禁止されています。
(インデックスやキーと値のペアなど、順序立てしてないとダメだから?)

そこで『何も無い』ということを示すポインタを用意するのがNSNullクラスのnullメソッドです。


・null

+ (NSNull *)null

NSNullクラスのシングルトンインスタンスを返します


シングルトンとはインスタンスを一つしか作らないクラスのことで、NSNullのインスタンスは何処で何回呼ばれても同じものになります。

要は『配列と辞書で空要素を入れたい時は、nilじゃなくて『NSNull null』を使う』ということなのですが、『じゃあ、全部nilじゃなくて『NSNull null』にすれば?』と普通に疑問に思いつつ、調べても理解できなかったので追々ということで・・・

nilを調べていたら『OKLab/Objective-C入門』で、nilとNilは別物だと知りました。
違いがよく分かりませんけど・・・

(救いを求めて、ぐぐって迷い込んで来られた方へ。こんな内容で申し訳有りません)



参考文献

NSNumber Class Reference

NSValue Class Reference

NSArray Class Reference

NSMutableArray Class Reference

NSNull Class Reference

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
(2009/09/08)
木下 誠

商品詳細を見る

詳解 Objective-C 2.0 第3版詳解 Objective-C 2.0 第3版
(2011/12/28)
荻原 剛志

商品詳細を見る

Dynamic Objective-CDynamic Objective-C
(2009/03/27)
木下 誠

商品詳細を見る






Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Wave SoundTouch music system IV
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR