zoukankan      html  css  js  c++  java
  • Foundation框架中的数据类型

    一、一些有用的数据类型

    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"];


    作者:
    出处:http://www.cnblogs.com/ChenYilong/(点击RSS订阅)
    本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    详解瀑布流布局的5种实现方式及object-fit
    npm私服配置使用
    node快速计算md5
    ajax下载文件实现接受json数据和文件流两种形式
    mac items+sshpass实现服务器登录管理
    web前端私有化部署方案
    chrome devTool中请求各项参数含义
    electron-updater实现electron应用程序更新
    Electron-builder打包应用程序策略
    electron打包配置方案
  • 原文地址:https://www.cnblogs.com/ChenYilong/p/2808621.html
Copyright © 2011-2022 走看看