您的位置:首页 > 移动开发 > Objective-C

Objective-C边学边记-7:Foundation Kit快速教程之 范围、几何数据类型、字符串

2010-10-25 02:49 579 查看
Cocoa是由两个不同的框架组成:Foundation Kit 和 Application Kit(AppKit)。AppKit包含了所有的用户接口对象和高级类。

1.范围
NSRange:用来表示相关事物的范围,定义于NSRange.h。通常是字符串里的字符范围或者数组(NSArray)里的元素范围。

typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;


创建方法:
直接给字段赋值:

NSRange range;
range.location = 17;
range.length = 4;


或者,应用C语言的聚合结构赋值机制:

NSRange range = {17,4};


或者,适用Cocoa提供的函数NSMakeRange():

NSRange range = NSMakeRange ( 17 ,4 );


使用NSMakeRange函数的好处是你可以在任何能够使用函数的地方使用它。

2.几何数据类型
点:NSPoint //NSRange.h

typedef struct _NSPoint {
CGFloat x;
CGFloat y;
} NSPoint;


尺寸:NSSize //NSGeometry.h

typedef struct _NSSize {
CGFloat width;
CGFloat height;
} NSSize;


矩形:NSRect //NSGeometry.h

typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;


创建函数:NSMakePoint() , NSMakeSize() , NSMakeRect()

将这些数据类型定义成C的struct而不是Objective-C的对象最根本的原本是因为性能

3.字符串
1)创建格式字符串:NSSring的stringWithFormat:

NSString *myName;
myName = [NSString stringWithFormat:
@"My name is %@ , and I am %d yeas old.",
@"Elf Sundae",22];


2)NSString中的length方法返回字符串中的个数,可以处理国际字符串。如

NSLog(@"%d",[@"test测试" length]);    //返回6


3)isEqualToString:字符串比较,返回BOOL

NSString *thing1 = @"hello,8";
NSString *thing2 = [NSString stringWithFormat:
@"hello,%d",7];
if ([thing1 isEqual: thing2]){
NSLog(@"Yes,they are the same.");
} else {
NSLog(@"NO,they are not the same.");
}


compare:逐个字符进行比较,

- (NSComparisonResult)compare:(NSString *)aString


compare:options: 带选项的比较字符串

- (NSComparisonResult)compare:(NSString *)aString
options:(NSStringCompareOptions)mask


返回一个NSComparisonResult的枚举值:

typedef enum _NSComparisonResult {
NSOrderedAscending = -1,    // <
NSOrderedSame,            // =
NSOrderedDescending        // >
} NSComparisonResult;


“==”运算符只判断两个字符串的指针数值,而不是它们所指的对象,以下例子请区别:

NSString *thing1 = @"hello,8";

NSString *thing2 = [NSString stringWithFormat:

@"hello,%d",8];

if ([thing1 isEqual: thing2]){

NSLog(@"Yes,they are the same.");

} else {

NSLog(@"NO,they are not the same.");

}

if (thing1 == thing2){

NSLog(@"thing1 == thing2");

} else{

NSLog(@"thing1 != thing2");

}

输出:
2010-10-21 14:47:14.282 FoundationKit1[1965:a0f] Yes,they are the same.
2010-10-21 14:47:14.282 FoundationKit1[1965:a0f] thing1 != thing2

字符串匹配查询
// 检查字符串是否以另一个字符串开头

- (BOOL)hasPrefix:(NSString *)aString


// 检查字符串是否以另一个字符结尾

- (BOOL)hasSuffix:(NSString *)aString


例如:

BOOL b = [@"test" hasSuffix: @"st"];


// 查询是否包含某字符串,返回匹配部分在哪里以及能够匹配的字符个数(NSRange类型)

- (NSRange)rangeOfString:(NSString *)aString


Returns {NSNotFound, 0} if aString is not found or is empty (@"").

// rangeOfString:options:
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask


4)可变性
NSString是不可变的,一旦NSString被创建,就不能改变它。可以用它来生成新的字符串,查找字符串或将它与其他字符串比较,但是不能以删除字符或者添加字符的方式来改变它。
如果想改变字符串,请使用NSString的子类NSMutableString。
NSString类似Java中的String,NSMutableString类似与Java中的StringBuffer。
创建NSMutableString:stringWithCapacity:

+ (id) stringWithCapacity: (unsigned) capacity;


这个capacity(容量)只是给NSMutableString的一个建议,字符串的大小并不限制与所提供的capacity,这个capacity只是个最优值。

NSMutableString *string;
string = [NSMutableString stringWithCapacity:42];


一旦有了一个可变字符串,就可以对它执行各种操作了。
附加字符串:appendString: 或 appedFormat:
由于NSMutableString是NSString的之类,所以在任何使用NSString的地方都可以用NSMutableString代替,与实例方法一样,继承同样对类方法(类似其他语言中的静态方法,定义前缀为加号 + )也适用。
Example:

OBJECTIVE-C CODE :NSMutableString

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

//NSMutableString
NSMutableString *string;
// 创建
string = [NSMutableString stringWithCapacity:40];

// append
[string appendString: @"Hello,"];
[string appendFormat: @"World! %d",1024];
NSLog(@"%@",string);	// Hello,World! 1024

// delete characters
NSRange worldRange;
worldRange = [string rangeOfString: @"World"];
[string deleteCharactersInRange:worldRange];
NSLog(@"%@",string);	// Hello,! 1024

// 由于NSMutableString是继承自NSString,
// 所以NSMutableString可以使用NSString的方法
NSMutableString *str;
str = [NSMutableString stringWithFormat: @"My age is %d",22];
NSLog(@"%@",str);

[pool drain];
return 0;
}


#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

//NSMutableString
NSMutableString *string;
// 创建
string = [NSMutableString stringWithCapacity:40];

// append
[string appendString: @"Hello,"];
[string appendFormat: @"World! %d",1024];
NSLog(@"%@",string); // Hello,World! 1024

// delete characters
NSRange worldRange;
worldRange = [string rangeOfString: @"World"];
[string deleteCharactersInRange:worldRange];
NSLog(@"%@",string); // Hello,! 1024

// 由于NSMutableString是继承自NSString,
// 所以NSMutableString可以使用NSString的方法
NSMutableString *str;
str = [NSMutableString stringWithFormat: @"My age is %d",22];
NSLog(@"%@",str);

[pool drain];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: