5.Foundaton Kit介绍 部分一

来源:互联网 发布:电锯惊魂影评知乎 编辑:程序博客网 时间:2024/05/22 05:27

1.一些有用的数据类型

 1.1范围

     第一个结构体是NSRange

   typedef struct _NSRange

{

usigned int location;

usigned int length;

} NSRange;

  这个结构体用来表示相关事物的范围,通常是字符串里的字符范围或者数组里的元素范围。Location字段存放该范围的起始位置,而length字段则是该范围内所含元素的个数。在字符串“Objective-C is a cool language”中,单词cool可以用location为17,length为4的范围来表示。location还可以用NSNotFound这个值来表示范围,比如变量没有初始话化。

  创建新的NSRange有三种方式。

  第一种,直接给字段赋值:

   NSRange range ;

       range.location = 17;

       range.lengte = 4;

  第二种,应用C语言的聚合结构赋值机制:

   NSRange range = {17,4};

  第三种方式是Cocoa提供的一个快捷函数NSMakeRange():

   NSRange range = NSMakeRange(17,4);

   使用NSMakeRange()的好处是可以在任何能够使用函数的地方使用它,例如在方法调用中将其作为参数进行传递。

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

    1.2几何数据类型

    CGPoint表示的是笛卡尔平面中的一个坐标(x,y)。

    struct CGPoint

{

float x;

float y;

};

    CGSize用来存储长度和宽度:

      struct CGSize

{

float width;

float height;

};

    矩形数据类型CGRect:

     struct CGRect

{

CGPoint origin;

CGSize size;

};

   1.3字符串

      1.3.1创建字符串

   们知道诸如printf()和NSLog()之类的函数会接受格式化字符串和一些参数来输出格式化的结果。NSString的stringWithFormat:方法就是这样通过格式化字符串和参数来创建NSString的。

   + (id) stringWithFormat: (NSString *) format,...;

   可以按如下方式床架一个新的字符串:

   NSString *height;

   height = [NSString stringWithFormat:@“Your height is %d feet,%d inches",5,11];

  得到的字符串是“Your height is 5 feet,11 inches".

   1.3.2类方法

   stringWithFormat:的声明中有两个值得注意的地方。

   第一个是定义最后的省略号(...),它告诉我们和编译器这个方法可以接受多个以逗号隔开的其他参数。

   而另一个古怪但是非常重要的地方是生命语句中有一个非常特别的起始字符:一个加号。Objective-C运行时生成一个类的时候,会创建一个代表该类的类对象(class object)。类对象包含了指向超类、类名和类方法列表的指针,还包含一个long类型的数据,为新创建的实例对象指定大小(以字节为单位)。

   如果在声明方法时添加了加好,就是把这个方法定义为 类方法(class method).这个方案属于类对象(而不是类的实例对象),通常用于创建新的实例。称这种用来创建新对象的类方法为工厂方法(factory method)。

   stringWithFormat:就是一个工厂方法,它根据你提供的参数创建新对象。用stringWithFormat:来创建字符串比创建空字符串然后生成所有元素容易得多。

   类方法也可以用来访问全局数据。

   我们所创建的大部分方法都是实例方法,要用减号(-)作为前缀来进行声明。这些方法将会在指定的对象实例中起作用,比如获取一个Circle的颜色或者一个Tire的压强。如果某个方法所实现的是很通用的功能,比如创建一个实例对象或者访问一些全局数据类型,那么最好使用加好(+)作为前缀将它声明为类方法。

 1.3.3 关于大小

    NSString中另一个好用的方法(实例方法)是length,它返回的字符串中的字符个数。

    - (NSString )length;

    可以这样使用它;

     NSUInteger length = [height length];

    也可以在表达式中使用它,如下所示。

     if([height length]> 35)

{

NSLog(@"wow,you're really tall!");

}

  1.3.4字符串比较

    isEqualToString:可以用来比较接收方(receive而,接受消息的对象)和作为参数传递过来的字符串。isEqualToString:返回一个BOOL值(YES或NO)来表示两个字符串的内容是否相同。它的声明如下。

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

    下面是它的使用方法。

    NSString *thing1 = @"hello 5";

    NSStrign *thing2 = [NSString stringWithFormat:@"hello %d",5];


      if([thing1 isEqualToString: thing2])

{

NSLog(@"They are the same!);

}

     要比较两个字符串,可以使用compare:方法,其声明如下。

  - (NSComparsionResult) comapre: (NSString *) aString;

    compare:将接受对象和传递过来的字符串逐个进行比较,它返回一个NSComparsionResult(也就是一个enum型枚举)来显示比较结果。

  enum

{

NSOrderedAscending = -1,//左侧的数值小于右侧的数值

NSOrderedSame,

NSOrederdDescending

};

typdef NSInteger NSComparisonResult;

    正确比较字符串

  比较两个字符串是否相等时,应该使用isEqualToString:而不能仅仅比较字符串的指针值,举个例子:

   if([thing1 isEqualToString: thing2])

{

NSLog(@"The strings are the same1”);

}

  不同于

  if(thing 1 = thing 2)

{

NSLog(@“they are the same object!");

}

 这是因为==运算符只判断thing1和thing2的指针数值,而不是它们所指的对象。由于thing1 和thing2是不同的字符串,所以二种比较方式会认为它们是不同的。

  因此,如果想检查两个对象(thing1 和thing2)是否为同一事物,就应该使用运算符==。如果是想检查看是否相等(即这两个字符串是否内容相同),那么就是用isEqualToString.

  1.3.5不区分大小写的比较

   compare:进行的是区分大小写的比较。

   compare:options:,它能给我们更多的选择权。

   - (NSComparsionResult) compare:(NSString *) aString

      options:(NSStringCompareOptions) mask;

    options参数是一个掩位码。你可以使用位或bitwise-OR运算符(|)来添加选项标记。一些常用的选项如下。

     NSCaseInsenitiveSearch: 不区分大小写的字符。。

     NSLiterlSearch:进行完全比较,区分大小写字符。

     NSNumericSearch:比较字符串的字符个数,而不是字符串值。如果没有这个选项,100会排在99的前面,程序员以外的人会觉得奇怪,甚至会觉得它是错的。

  假如你想比较字符串,需要忽略大小写并按字符个数进行排序,那么应该这么做:

   if([thing1 compare: thing2 options:NSCaseIntsensitiveSearch | NSNumericSearch] == NSOrderedSame)

{

NSLog(@"They match!");

}

  1.3.6字符串内是否还包含别的字符串

    检查字符串是否以另一个字符串开头,判断字符串是否以另一个字符串结尾。

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

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

  例:

   NSString *fileName = @"draft-chapter.pages";


  if([fileName hasPrefix:@"draft"])

{

//this is a draft

}

  if(fileName hasSuffix:@".mov])

{

//this is a movie

}

   如果想知道字符串内的某处是否包含其他字符串,使用rangeOfStrign:。

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

  例:

     NSRange range = [filename rangeOfString: @"chapter"];















0 0
原创粉丝点击