objective-c之各種數值

來源:互聯網
上載者:User
文章目錄
  • NSNumber
  • NSValue
  • NSNull
各種數值

NSArray和NSDictionary都只能儲存物件,不能儲存任何基本類型的資料,如int,float,struct。因此我們可以用對象來封裝基本的數值。

NSNumber

Cocoa提供了NSNumber來儲存物件,但不能儲存C裡面的各種資料,所以我們要用一些相應的對象來進行封裝。

NSNumber類來封裝基本資料對象。可以有下列方法:

+ (NSNumber *) numberWithChar: (char) value;

+ (NSNumber *) numberWithInt: (int) value;

+ (NSNumber *) numberWithFloat: (float) value;

+ (NSNumber *) numberWithBool: (BOOL) value;

只要將一個基本類型資料封閉到NSNumber中後,就可以通過下面的執行個體方法重新獲得它:

- (char) charValue:

- (int) intValue;

-(float)floatValue;

- (BOOL)boolValue;

- (NSString *) stringValue;

 

NSValue

NSNumber實際上是NSValue的子類,NSValue可以封裝任意值,你可以用NSValue將結構放入NSArray和NSDictionary中,通過下列方法建立新的NSValue:

+ (NSValue *) valueWithBytes:(const void *) values

                objCType:(constchar*) type;

傳遞的參數是你想要封裝的數值的地址(如一個NSSize或者你自己的struct)。通常,得到的是你想要儲存的變數的地址,你也可以提供一個用來描述這個資料類型的字串,通常用來說明struct中實體的類型和大小。如下例所示,將NSRect放入到NSArray中:

NSRect rect = NSMakeRect(1, 2, 30, 40);

NSValue *value;

value = [NSValue valueWithBytes: &rect

objCType: @encode(NSRect)];

[array addObject: value];

可以使用getValue:來提供數值:

- (void) getValue: (void *) vaule;

調用getValue:時,要傳遞的是要儲存這個數值的變數的地址:

value = [array objectAtIndex:0];

[value getValue: &rect];

 

Cocoa提供了將常用的struct型資料轉換成NSValue便捷方法,如下所示:

+ (NSValue*) valueWithPoint:(NSPoint) point;

+ (NSValue*) valueWithSize:(NSSize) size;

+ (NSValue*) valueWithRect:(NSRect) rect;

 

- (NSPoint) pointValue;

- (NSSize) sizeValue;

- (NSRect) rectValue;

例:

value = [NSValue valueWithRect:rect];

[array addObject:value];

NSRect anotherRect = [value rectValue];

 

NSNull

有時確實需要存一個NULL值,而大多數的對象裡面是不允許存nil值的,那麼使用NSNull就可以解決這個問題。

+ (NSNull *) null;

例:

[contact setObject:[NSNull null]

forKey:@”home fax machine”];

那麼怎麼進行訪問及判斷呢:

id homefax;

homefax = [contact objectForKey:@”home fax machine”];

 

if(homefax == [NSNull null])

{

//…no fax machine

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.