一、结构体
1、NSRange
(1)、类型定义
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange
注:NSUInteger即为 unsigned long 类型
简单示例:
用NSRange表示字符串@"i love oc"中 love的范围,location = 2 ,length = 4
用NSRange表示数组{10,11,12,13,14}中12,13,14的范围,location = 2 ,length = 3
(2)、建立结构体
NSRange r1 = {2, 4};
NSRange r2 = {.location = 2, .length = 4};
以上方法不常用,经常调用函数MakeRange建立结构体
NSMakeRange(NSUInteger loc, NSUInteger len)
例如:
NSRange r3 = NSMakeRange (2, 4);
(3)、结构体的使用示例
查找字符串love在str中的范围,如果找不到,length=0,location=NSNotFound==-1
NSString *str = @"i love oc";
NSRange range = [str rangeOfString:@"love"];
NSLog(@"loc = %ld, length=%ld", range.location, range.length);
2、NSPoint/CGPoint
(1)、类型定义
typedef CGPoint NSPoint;
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
注:
- NSPoint即为CGPoint,建议使用CGPoint
- CGFloat即为double类型
(2)、建立结构体
CGPoint p1 = {10,10};
最常用的还是利用函数建立结构体
NSMakePoint(CGFloat x, CGFloat y)
CGPointMake(CGFloat x, CGFloat y) // 最常用
示例:
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);// 最常用
原点表示CGPointZero
CGPointZero == CGPointMake(0, 0)
3、NSSize/CGSize
(1)类型定义
typedef struct _NSSize {
CGFloat width;
CGFloat height;
} NSSize;
( 2 )、建立结构体
相关函数
NSMakeSize (CGFloat w, CGFloat h)
CGSizeMake(CGFloat width, CGFloat height)
示例;
NSSize s1 = CGSizeMake(10, 15);
NSSize s2 = NSMakeSize(10, 15);
CGSize s3 = NSMakeSize(10,15);
CGSizeZero == CGSizeMake(0, 0)
4、NSRect/CGRect
(1)类型定义
typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;
( 2 )、建立结构体
相关函数
CGRectMack(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
CGMackRect (CGFloat x, CGFloat y, CGFloat w, GFloat h)
示例:
CGRect r1 = CGRectMake(0, 0, 10,15);
CGRect r2 = { {0, 0}, {10, 15}};
CGRect r3 = {p1, s2};
CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};
CGRectZero
5、结构体转为字符串
一般输出结构体的成员变量是逐个输出,如
NSLog(@"x=%f, y=%f, width=%f, height=%f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);
这种方法比较麻烦,所以将结构体转为字符串,输出字符串
NSString *str = NSStringFromPoint(p1);
NSString *str = NSStringFromSize(s3);
NSString *str = NSStringFromRect(r1);
NSLog(@"%@", str);
6、结构体常用函数
(1)CGPointEqualToPoint
比较两个点是否相同
BOOL b1= CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
同理还有
CGRectEqualToRect(CGRect rect1, CGRect rect2)
CGSizeEqualToSize(CGSize size1, CGSize size2)
(2)CGRectContainsPoint
判断点是否在矩形框中
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));
注:使用这些CGPointEqualToPoint、CGRectContainsPoint、CGPointZero等函数要添加CoreGraphics框架
二、字符串
1、NSString : 不可变字符串
(1)字符串的创建
NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc] initWithString:@"jack"];
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
(2)C/OC字符串转换
C语言字符串转为OC字符串
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
OC字符串转为C语言字符串
const char *cs = [s4 UTF8String];
(3)读取文件内容
方法一
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/yang/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
方法二
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/yang/Desktop/1.txt"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
补充
NSUTF8StringEncoding :用到中文就可以用这种编码
URL 表示资源路径,格式:协议头://路径
协议头包括file://, ftp://
(4)字符串的导出
方法一
[@"Jack\nJack" writeToFile:@"/Users/yang/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
方法二
NSURL *url = [NSURL fileURLWithPath:@"/Users/yang/Desktop/my2.txt"];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
2、NSMutableString : 可变字符串,继承自NSString
常见使用示例
- 创建可变字符串
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
- 拼接内容到s1的后面
[s1 appendString:@" 11 12"];
- 删除制定字符串
NSRange range = [s1 rangeOfString:@"is"]; // 获取is的范围
[s1 deleteCharactersInRange:range];
- 对比
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
// 拷贝一份s2的内容,并将新内容拼接到后面赋给s3
NSString *s3 = [s2 stringByAppendingString:@" 11 12"];