时间:2014-8-21/10:23 am
@interface部分编译后,你才能使用该类的对象,调用类方法,将对象复合到其他类中,以及创建子类。
源代码的另一个组成部分是实现。@implementation部分告诉Object-C编译器如何让该类工作。这部分代码实现了接口@interface Car: NSObject - (void) setEngine: (Engine *) newEngine; - (Engine *) engine; -(void) setTire: (Tire *) tire atIndex: (int) index; -(Tire *) tireAtIndex: (int) index; -(void) print; @end // Car如果编译这个头文件就会出错,因为编译器会提示找不到Tire和Engine。如果导入Tire.h和Engine.h文件的话,编译器会
#import <Cocoa/Cocoa.h> @class Tire; @class Engine; @interface Car: NSObject - (void) setEngine: (Engine *) newEngine; - (Engine *) engine; -(void) setTire: (Tire *) tire atIndex: (int) index; -(Tire *) tireAtIndex: (int) index; -(void) print; @end // Car说明:
数据类型 |
OC关键字 |
格式说明引导符 |
整形 |
int |
%d、%i |
短整型 |
short int |
%hd、%hi |
长类型 |
long int |
%ld、%li |
无符号整型 |
unsigned int |
%u |
无符号短整型 |
unsigned short |
%hu |
无符号长整形 |
unsigned long |
%lu |
浮点型 |
float |
%f |
双精度型 |
double |
%f |
长双精度类 |
long double |
%lf |
字符型 |
char |
%c |
(1)、一些有用的数据类型。
1.1 结构体:
typedef struct _NSRange { unsigned int location; unsigned int length; } NSRange;这个结构体用来表示相关事物的范围,通常是字符串里的字符范围或者数组里的元素范围。
NSRange range; range.location = 17; range.length = 4;第二种,应用C语言的聚合结构赋值机制:
NSRange range = {17, 4};第三种方式是Cocoa提供的一个快捷函数NSMakeRange():
NSRange range = NSMakeRange(17, 4);使用NSMakeRange()的好处是你可以在任何能够使用函数的地方使用它,例如在方法调用中将其作为参数进行传递。
[anObject flarbulateWithRange: NSMakeRange (13, 15)];1.2 几何数据类型:
struct CGPoint { float x; float y; }CGSize 用来存储长度和宽度:
struct CGSize { float width; float height; }Cocoa提供了一个矩形数据类型,它由坐标和大小复合而成。
struct CGRect { CGPoint origin; CGSize size; }Cocoa也为我们提供了创建这些数据类型的快捷函数:CGPointMake()、CGSizeMake()、CGRectMake()。
+ (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”。
实例方法要用实例对象去调用。
类方法的调用举例:NSColor *haveTheBlues = [NSColor blueColor];或
UIColor *blueMan = [UIColor blueColor];1.3.2
- (NSUInteger) length;可以这样使用:
NSUInteger length = [height length];或
if ([height length] > 35) { NSLog(@"wow, you're really tall!"); }网上资料:
- (BOOL) isEqualToString: (NSString *) aString;使用方法:
NSString *thing1 = @"hello 5"; NSString *thing2 = [NSString stringWithFormat: @"hello %d", 5]; if (thing1 isEqualToString: thing2) { NSLog (@"They are the same!"); }
要比较两个字符串,可以使用compare:方法,其声明如下。
- (NSComparisonResult) compare: (NSString *) aString;compare:将接收对象和传递过来的字符串逐个进行比较,它返回一个 NSComparisonResult(也就是一个enum型枚举)来显示比较结果。
enum { NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending }; typedef NSInteger NSComparisonResult;注:
[@"aardvark" compare: @"zygote"]
将会返回 NSOrderedAscending。
同样,
[@"zoinks" compare: @"jinkies"]
将会返回 NSOrderedDescending。当然,
[@"fnord" compare: @"fnord"]
返回的是 NSOrderedSame。
1.3.4
不区分大小写的比较
compare: 进行的是区分大小写的比较。即@"Bork"和@"bork"的比较是不会返回 NSOrderedSame。
compare:options,他能给我们更多的选择权。
- (NSComparisonResult) compare: (NSString *) aString options: (NSStringCompareOptions) mask;options参数是一个掩位码。你可以使用位或bitwise-OR运算符(|)来添加选项标记。
if ([thing1 compare: thing2 options: NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame) { NSLog (@"They match!"); }1.3.5
- (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 }于是,draft-chapter.pages会被识别为文档的草稿版本(因为它以draft开头),但是不会将他识别为电影(它的结尾是.pages而不是.mov)。
- (NSRange) rangeOfString: (NSString *) aString;方法会返回一个 NSRange 结构体,告诉你与这个字符相匹配的部分在哪里以及能够匹配上的字符个数。
NSRange range = [fileName rangeOfString: @"chapter"];返回的range.location为6,range.length为7。如果传递的参数在接受字符串中没有找到,那么range.location则等于 NSNotFound。
+ (id) stringWithCapacity: (NSUInteger) capacity;个方法是设置 NSMutableString 的建议容量,可以超过其大小。可以按如下方式创建一个新的可变字符串:
NSMutableString *string = [NSMutableString stringWithCapacity: 42];我们可以通过 appendString: 或 appendFormat: 来附加新字符串,如下所示。
- (void) appendString: (NSString *) aString; - (void) appendFormat: (NSString *) format, ...;用法示例:
NSMutableString *string = [NSMutableString stringWithCapacity: 50]; [string appendString: @"Hello there"]; [string appendFormat: @"human %d!", 39];输出结果:
- (void) deleteCharactersInRange: (NSRange) aRange;举例:
NSMutableString *friends = [NSMutableString stringWithCapacity: 50]; [friends appendString: @"James BethLynn Jack Evan"];接下来,找到Jack的名字在字符串中的范围
NSRange jackRange = [friends rangeOfString: @"Jack"]; jackRange.length++; // eat the space that follows删除Jack
[friends deleteCharactersInRange: jackRange];如此一来,这个字符串就剩下了"James BethLynn Evan"。