Foundation一些有用的数据类型

298 篇文章 2 订阅


NSRange范围

typedef struct  _NSRange{

         unsigned int location;

         unsigned int length;

}NSRange;

unsigned intC语言中的int类型

location用来存放字段范围的起始位置,length是该范围内所含元素的个数

字符串”Objective-C is a cool language”coollocation17length4

三种赋值方式:

1       直接给字段赋值

NSRange range;

range.location = 17;

range.length = 4;

2       C语言的聚合结构赋值

NSRange range = {17,4};

3       Cocoa提供的快捷函数NSMakeRange(位置参数、长度参数)

NSRange range = NSMakeRange(17,4);

可以在方法调用中传递参数

[anObject  flarbulateWithRange: NSMakeRange(13,15)];

 

几何数据类型

NSPoint笛卡儿平面中的坐标点(x,y

typedef struct _NSPoint{

         float x;

         float y;

}NSPoint;

快捷函数:NSMakePoint()

NSSize用来存储长度和宽度

typedef  struct _NSSize{

         float width;

         float height;

}NSSize;

快捷函数:NSMakeSize()

NSRect矩形数据类型

typedef  struct  _NSRect{

         NSPoint origin;

         NSSize  size;

}NSRect;

快捷函数:NSMakeRect();

 

 

二、字符串NSString

NSString类,其字符串以@开头,例@”Hello World”

 

格式化字符串

stringWithFormat方法

+(id) stringWithFormat(NSString *)format,….

最后的….表示这个方法可以接收多个逗号隔开的其他参数

+(id)表示这个方法属于类对象不属于类的实例对象,类方法可以访问全局数据

-)声明的方法是实例方法,在实例对象中运行

例:NSString *height;

         height = [NSString stringWithFormat:@”Your height is %d feed. %d incheds”,5,11];

 

字符串长度

length方法

-(unsigned  int) length;

unsigned int length = [height length];

在表达式中使用

if([height length] > 35){

         NSLog(@”wow,you’re really tall!!”);

}

 

 

字符串比较方法

isEqualToString方法可以用来比较接收方(接收消息的对象)和当做参数传递来的字符串,返回BOOL

例:

         -(BOOL)isEqualToString:(NSString *)aString;

NSString *thing1 = @”hello”;

NSString *thing2 = @”hello”;

if([thing1 isEqualToString: thing2]){

         NSLog(@”They are the same”);

}

 

compare方法,将接收对象和传递来的字符串逐个字符进行比较,返回一个NSComparisonResult(枚举型数据),是区分大小写的比较

typedef  enum  _NSComparisonResult{

         NSOrderedAscending = -1,

         NSOrderedSame,

         NSOrderedDescending

} NSComparisonResult;

例:[@”aardvark”  compare: @” zoinks”] 返回NSOrderedAscending

[@”zoinks”  compare: @”jinkies”] 返回NSOrderedDescending

         [@”fnord”  compare:@”fnord”] 返回NSOrderedSame

不区分大小写的参数

-(NSComparisonResult)   compare: (NSString)string

                                   options(unsigned)mask;

options参数是一个位掩码,可以使用位或|来添加选项标记

                   NSCaseInsensitiveSearch:不区分大小写字符

                   NSLiteralSearch:进行完全比较,区分大小写

                   NSNumericSearch:比较字符串的字符个数,不比较字符值,不选他100会排在99                                                              前面

例:

if([thing1 compare :thing2 option : NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame)

{

         NSLog(@"is Match");

}

 

字符串检索

-(BOOL)hasPrefix:(NSString *) aString;          检查字符串是否以另一个字符串开头

-(BOOL)hasSuffix:(NSString *) aString;          判断字符串是否以另一个字符串结尾

例子:if([filename hasPrefix: @”draft”])

 

字符串某处包含其他字符串

-(NSRange) rangeOfString : (NSString *)aString;

例:NSRange range = [fileName rangeOfString : @"chapter"];

找到了range.startlength为数字,没找到startNSNotFound

可变性的字符串

NSMutableString

NSString是不可变的字符串,NSMutableStringNSString的子类可以改变字符串的长度

使用类方法stringWithCapacity创建或stringWithFormat –因为继承的关系NSString中的类也可调用

+(id)stringWithCapacity:(unsigned) capacity;

例:NSMutableString *string;

         string = [NSMutableString  stringWithCapacity:42];

附加新字符串appendStringappendFormat

-(void) appendString: (NSString *) aString;                aString附加到接收对象的末尾

-(void) appendFormat: (NSString *) format, ….;      将格式化的字符串附加在接收字符串的末尾

删除字符串中的字符deleteCharactersInRange

例:创建朋友列表

NSMutableString *friends;

         friends = [NSMutableString  stringWithCapacity:50];

         [friends  appendString: @”James BethLynn Jack Evan”];

         查找Jack的字符范围

         NSRange  jackRange;

         jackRange  = [friends  rangeOfString: @”Jack”];

         jackRange.length++;        吃掉剩下的空间

         删除Jack

         [friends  deleteCharactersInRange:  jackRange];

 

 

三、集合

NSArray不可变数组

NSArray可以存入任意类型的对象,通过索引访问对象

                   不可以存非Objective-C的对象,不能存nil0NULL值)

构造方法+(id)arrayWithObjects:object, …. , nil;

结尾处必须加nil已表示赋值结束

例子:     NSArray  *array;

                   array  = [NSArray arrayWithObjects : @”one” , @”two” , @”three” , nil];

 

获取数组对象个数

-(unsigned) count;

获取特定索引处的对象

-(id) objectAtIndex: (unsigned int) index;

 

例子:二者结合用于循环

                   int I;

                   for (I = 0; I < [array  count]; i++){

         NSLog(@”index  %d  has  %” , i , [array  objectAtIndex:  i]);

}

 

切分数组

-componentsSeparatedByString

例子:

                   NSString  *string  = @”oop:ack:bork:greeble:ponies”;

                   NSArray  *chunks = [string  componentsSeparatedByString: @”:”];

componentsJoinedByString合并NSArray中的元素创建字符串

                   string = [chunks  componentsJoinedByString: @”:-)”];

 

 

NSMutableArray可变数组

可以任意添加和删除数组中的对象

 

构造方法:

+(id) arrayWithCapacity : (unsigned) numitems;

例:

NSMutableArray *array;

array = [NSMutableArray  arrayWithCapacity : 17];

 

使用addObject在数组末尾添加对象:

-(void) addObject : (id) anObject;

例:

for(i = 0; i < 4 ; i++){

         Tire  *tire = [Tire new];

         [array  addObject : tire];

}

 

使用removeObjectAtIndex删除对象:

-(void) removeObjectAtIndex : (unsigned) index;

例:[array  removeObjectAtIndex : 1];

 

 

四、枚举

NSEnumerator使用枚举来迭代运算集合

通过objectEnumerator从前向后遍历集合

通过reverseObjectEnumerator从后向前遍历集合

-(NSEnumerator *) objectEnumerator;

-(NSEnumerator *) reverseObjectEnumerator;

 

利用while循环向枚举器请求nextObject对象(下一个对象):

-(id) nextObject;

nextObject返回nil时循环结束

举例代码:

         NSEnumerator  *enumerator;

         enumerator = [array  objectEnumerator];

         Id  thingle;

         while(thingle = [enumerator  nextObject]){

                   NSLog(@"I  found %@",thingle);

         }

 

Tip:对可变数组操作时不能通过添加或删除对象来改变数组容器,否则程序会崩溃

 

 

快速枚举

Mac OS X 10.5 Leopard 中添加了此方法,之前版本无法使用

 

循环会遍历数组中的每个元素,并用指定的变量存储每个数组对象

:

         for (NSString  *string  in  array){

                   NSLog(@"I  found  %@", string);

         }

 

NSDictionary不可变字典集合

键值对集合,不可变集合,在创建时就要提交全部的对象和关键字

 

字典集合对于频繁查询和大型数据集来说要比其他数组高效的多,他直接通过键查询而无需遍历集合

 

构造函数+(id) dictionaryWithObjectsAndKeys : (id) firstObject,(id)firstKey,....;

此方法接受对象和关键字交替存储的序列,以nil值作为终止符,不能在集合中添加nil

举例代码:

         Tire  *t1 = [Tire  new];

         Tire  *t2 = [Tire  new];

         Tire  *t3 = [Tire  new];

         Tire  *t4 = [Tire  new];

        

         NSDictionary  *tires;

 

         tires = [NSDictionary  dictionaryWithObjectsAndKeys :

                            t1,@"front-left" , t2,@"front-right" ,

                            t3,@"back-left" , t4,@"back-right",nil];

使用方法objectForkey来获取字典中的值,向方法传递对应值的关键字

-(id) objectForKey : (id) akey;

举例代码:

         Tire  *tire = [tires  objectForKey : @"back-right"];

如果没有找到会返回nil

 

NSMutableDictionary可变字典集合

构造函数+(Id) dictionaryWithCapacity : (unsigned int) numitems;

长度只是建议无限制

也可使用dictionary

 

使用setObject : forKey方法给字典添加元素

-(void) setObject : (id) anObject forKey : (id) aKey;

举例代码:

         NSMutableDictionary  *tires;

         tires = [NSMutableDictionary dictionary];

         [tires  setObject : t1  forKey : @"front-left"];

如果已经有了该对象则修改该对象

 

使用removeObjectForKey方法删除关键字和对象

-(void)removeObjectForKey : (id) akey;

举例代码:

         [tires  removeObjectForKey : @"back-left"];

 

 

五、各种基本数据类

因为NSArrayNSDictionary只能存储对象,所以Objective-C提供了将基础数据类型封装为对象的类

NSNumber类包装基本数据类型

使用下列类方法创建新的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;

etc

Tip:高精度数据可以被低精度数据提取方法提取出来,NSNumber会对数据进行适当转换

 

 

 

NSValue可以包含任何值

NSValueNSNumber的超类

NSValue可以放入NSArrayNSDictionary

 

构造函数:+(NSValue  *) valueWithBytes : (const void *) value  存储变量的地址

                                                                                                                                   C语言中使用操作符&对象                                                                                                                                  名来操作对象地址

                                                        objCType : (const char *) type;               描述数据类型的字符串

                                                                                                                                   @encode编译器指令产生                                                                                                                          数据类型字符串

 

举例代码:

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

         NSValue  *value;

         value = [NSValue    valueWithBytes : &rect

                                               objCType : @encode(NSRect)];

         [array  addObject : value];

 

使用方法getValue来提取数值:需提供数值变量的地址,即&对象名

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

举例代码:

         value = [array  objectAtIndex : 0];

         [value  getValue : &rect];

Tip:还记得吗,get开头的方法返回的是一个指针

 

Cocoa提供了将常用struct型数据转换为NSValue的方法:

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

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

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

 

-(NSPoint) pointValue;

-(NSSize) sizeValue;

-(NSRect) rectValue;

举例代码:在NSArray中存储和检索NSRect

         value = [NSValue  valueWithRect : rect];

         [array  addObject : value];

         ……

         NSRect  anotherRect = [value  rectValue];

 

NSNull空值对象

因为nil在集合中有特殊含义所以创造出来这个类来代替nil

获得一个NSNull空值方法+(NSNull  *) null;

举例代码:

(1)判断是否为空

         id homefax;

         homefax = [contact  objectForKey : @"123 456 789"];

         if(homefax  ==  [NSNull  null]){

                   //

         }

(2)将空添加到集合中

         [contact          setObject : [NSNull  null]

                                     forKey : @"is nil"]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值