OC基础—结构体、字符串

------ android培训java培训、期待与您交流! ----------


           OC基础—结构体、字符串

 结构体(NSRange、NSPoint、NSSize、NSRect)

1. NSRange:

从字面上看出这NSRange是用来表示范围的,我们来看一下它的定义

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

NSRange拥有两个属性,位置(location),长度(length)
我们创建一个NSRange:
NSRange r = NSMakeRange(2, 4);
其中 2 就是位置,4 就是范围。

一般NSRange使用在NSString中查找某个字符串的范围,例子:
    // NSRange创建
    NSMakeRange(2, 4);
    
    NSString *s = @"i love oc";
    // 查找摸个字符穿在s中的范围
    // 如果找不到,length = 0, location = NSNotFound = -1
    NSRange range = [s rangeOfString:@"love"];
    NSLog(@"loc = %lu, length = %lu", (unsigned long)range.location, (unsigned long)range.length);

在查找字符串范围的是是奇偶,找到了就放回范围,如果找不到那么返回这么个东西:location = NSNotFound = -1,length = 0.

2. NSPoint\CGPoint

从字面来看,NSPoint就是点的意思,我们来看一下它的定义:

type struct _NSPoint
{
CGFloat x;
CGFloct y;
} NSPoint;

他就像一个点的坐标,其实他就是表示点的东西从字面来看。这个东西很重要,你想我们手机应用开发,很多地方用到定位,这个时候就是用到CGPoint。
现在我们来定义一个CGPoint:
    CGPoint p1 = NSMakePoint(10, 10);
    NSPoint p2 = CGPointMake(20, 20); // 这两种方式都是可以的,但是最常用这一种

NSMakePoint(10,10);和CGPointPointMake(20,20);这两种方式都是可以的,但是我们开发中最常用CGPointMake。

3. NSSize\CGSize

我们直接来看一下定义:
typedef struct _NSSize
{
    CGFloct width;
    CGFloct height;
} NSSize;

就是来表示一个UI元素的尺寸。
来创建一个CGSize:
    NSSize s1 = CGSizeMake(10, 20);
    CGSize s2 = NSMakeSize(20, 10);

4. NSRect\CGRect

我们来看一下定义
typedef struct _NSRect
{
    NSPoint origin;
    NSSize size;
} NSRect;

是的,NSRect就是表示UI元素的位置和尺寸
    // x,y,宽,高
    CGRect r1 = CGRectMake(0, 0, 50, 100);
    
    CGRect r2 = { {0,0},{100,90}};

我们也可以自己定义一个NSRect
CGRect myRect(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
    CGRect rect;
    rect.origin.x = x;
    rect.origin.y = y;
    rect.size.width = width;
    rect.size.height = height;
    return rect;
}

补充一点,我们可以利用NSString的一个方法来打印除结构体的内容
    // 整个结构体转成字符串
    NSString *str = NSStringFromPoint(p1);
    NSString *str2 = NSStringFromRect(r1);

再来介绍几个方法
    // 使用这些函数的前提,包含CoreGraphics框架
    
    // foundation框架是有NextSte架构的
    
    // 比较来两个点的位置是否相同
    BOOL b = CGPointEqualToPoint(p1, p2);
    
    BOOL b2 = CGSizeEqualToSize(s1, s2);
    // 判断p2在不在r1里面
    BOOL b3 = CGRectContainsPoint(r1, p2);

使用这些方法就必须包含CoreGraphics框架

5. NSString类

NSString:不可变字符串
NSMutableString:可变字符串
NSString有很多穿件方式,现在我们来看一下

1. 简单创建
NSString *s1 = @"我是字符串";
这种方法简单明了

2. 带参数字符串
NSString *s2 = [[NSString alloc] initWithFormat:@"我是字符串+%d", 10];

3. C字符串转换成OC字符串
NSString *s3 = [[NSString alloc] initWithUTF8String:"我是C字符串"];

4. OC字符串转换成c语言字符串
char *c = [s3 UTF8String];

5. 还有一个在文件中读取字符串
    NSString *s4 = [[NSString alloc] initWithContentsOfFile:@"/Users/liuthou/Desktop/liye.txt" encoding:NSUTF8StringEncoding error:nil];
    
    // URL:资源路径
    // 协议头://路径
    // file://
    // ftp://
    // 万能的!!
    NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liuthou/Desktop/liye.txt"];
    NSURL *url3 = [NSURL fileURLWithPath:@"file:///Users/liuthou/Desktop/liye.txt"];
    NSString *s5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

使用url方式是提倡的,他是万能的,可以读取任何文件。 

6. 最常用的创建字符串:
NSString *s = [NSString stringWithFormat:@"我是字符串+%d", 10];

7. 将字符串写入文件
    // 字符串的导入文件
    [@"liye\n hehe23412342134" writeToFile:@"/Users/liuthou/Desktop/liye.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    NSURL *url = [NSURL URLWithString:@"file:///Users/liuthou/Desktop/liye.txt"];
    [@"liye\n 1234567890" writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

6. NSMutableString类(可变的NSString)

NSMutableString是继承自NSString,所以NSMutableString包含NSString的方法,当然包括创建方式。

NSMutableString的创建:

    NSMutableString *s1 = [NSMutableString stringWithFormat:@"name is liye"];

操作字符串添加新字符

// 拼接内容到s1的后面
[s1 appendSstring:@"12,123"];

操作字符串删除字符

// 删除字符串
[s1 deleteCharactersInRange:CGSizeMake(5, 4)];
删除字符串所因为5在内的之后4个字符

我们也可以删除指定字符

// 获取删除字符范围
NSRange ranfe = [s1 rangeOfString:@"liye"];
// 删除指定范围字符
[s1 deleteCharactersInRange:range];

------ android培训java培训、期待与您交流! ----------

你可能感兴趣的:(OC基础)