在 Objective-C 中,為了保存基本的資料類型,像是 int
, float
, bool
,內建了許多與NSNumber
有關的方法。
+ (NSNumber *)numberWithBool:(BOOL)value
建立並返回一個包含了給定值的NSNumber
實體,將其視為BOOL
值
+ (NSNumber *)numberWithChar:(char)value //2
+ (NSNumber *)numberWithDouble:(double)value //3
+ (NSNumber *)numberWithFloat:(float)value //4
+ (NSNumber *)numberWithInt:(int)value //5
+ (NSNumber *)numberWithInteger:(NSInteger)value //6
NSNumber
實體,將其視為char
值NSNumber
實體,將其視為double
值NSNumber
實體,將其視為float
值NSNumber
實體,將其視為int
值NSNumber
實體,將其視為NSInteger
值- (BOOL)boolValue //7
- (char)charValue //8
- (double)doubleValue //9
- (float)floatValue //10
- (NSInteger)integerValue //11
- (int)intValue //12
- (NSString *)stringValue //13
BOOL
值char
值double
值float
值NSInteger
值int
值NSString
值ex.
#import <Foundation/Foundation.h>
@interface SampleClass : NSObject
- (NSNumber *)addA: (NSNumber *)a withB: (NSNumber *)b;
@end
@implementation SampleClass
- (NSNumber *)addA:(NSNumber *)a withB:(NSNumber *)b {
float number1 = [a floatValue]; // number1 = 類型為 float 的 a 值
float number2 = [b floatValue];
float value = number1 + number2;
NSNumber *result = [NSNumber numberWithFloat:value]; //number 本身不能算術運算,因此先轉成 float ,再變為 NSNumber
return result;
}
@end
int main () {
// NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //這與記憶體管理有關,但現在以是自動引用計數模式,已不可用了
SampleClass *sampleClass = [[SampleClass alloc] init];
NSNumber *a = [NSNumber numberWithFloat: 11.0];
NSNumber *b = [NSNumber numberWithFloat: 10.0];
NSNumber *result = [sampleClass addA:a withB:b];
NSString *resultString = [result stringValue]; //NSNumber 轉為 NSString
NSLog(@"結果為 %@",resultString);
return 0;
}
結果:
2021-09-28 01:00:31.403729+0800 TestOC[15699:212863] 結果為 21