------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
在学习完c和oc之后,接下来就是对于Foundation框架的学习,对于框架这一块,通过学习我感觉这一块就是为大家提供一些公共的工具(写好的类)。对于一些经常用到的东西,Foundation框架已经封装好了,大家可以拿来直接应用。废话不多说,接下来就写一些自己学到的东西。
一、结构体
Foundation框架中的结构体主要包含:NSRange、NSPoint/CGPoint、NSSize/CGSize、NSRect/CGRect。
1、NSRange:表示一个范围,它的定义形式为:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
结构体中的NSUInteger表示是long类型,location为位置,length为长度。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSString *str = @"i love oc"; //定义一个字符串
//利用结构体求出love在字符串中的位置
NSRange range = [str rangeOfString:@"love"];
NSLog(@"%ld, %ld", range.location, range.length); //输出位置,2,4
return 0;
}
在找不到的情况下,location的返回值是-1,length的返回值是0。
struct CGPoint {
CGFloat x;
CGFloat y;
};
x表示点得横坐标,y表示点的纵坐标,CGFloat表示double类型。CGPoint是跨平台的结构体,而NSPoint是非跨平台的。
CGPoint p1 = CGPointMake(12, 10); //常用定义方式
//NSPoint p1 = NSMakePoint(11, 3); //另一种定义方式
3、NSSize/CGSize表示一个区域,结构体定义为:
struct CGSize {
CGFloat width;
CGFloat height;
};
width表示宽度,height表示高度,
CGFloat表示double类型。
CGSize size = CGSizeMake(20, 22); //常用定义方式
NSSize size1 = NSMakeSize(20, 22); //另一种定义方式
4、NSRect/CGRect表示在某个的一个区域,结构体定义为:
typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;
可以看出在这个结构体中,拥有NSPoint结构体和NSSize结构体,分别表示点和区域。
NSRect rect = NSMakeRect(23, 13, 10, 8);
CGRect rect1 = CGRectMake(12, 23, 15, 11); //常用定义方式
CGRect r2 = {{4, 5}, {23, 3}};
CGRect r3 = {CGPointZero, CGSizeZero};
二、如何打印结构体?
1、利用遍历,逐个打印结构体中的数据,这点比较麻烦,在实际应用中一般不会用到。
2、把整个结构体转成字符串
NSPoint p2 = NSMakePoint(11, 3); //另一种定义方式
NSString *str2 = NSStringFromPoint(p2); //把结构体转换成字符串
NSLog(@"p2 = %@", str2); //输出字符串 输出结果为:p2 = {11,3}
因此可以类推,还存有的指令有:NSStringFromSize(), NSStringFromRange(), NSStringFromRect()。
三、字符串
Foundation框架中的字符串主要包含NSString,NSArray,NSSet,NSDictionary,NSDate,NSObject。
1、NSString就是基本的字符串类型,在之前的操作中经常用到。它含有一个子类NSMutableString。区别:NSString创建的字符串是不可改变的,而NSMutableString创建的字符串是可以改变的。
字符串的创建方式:
NSString *str = @"i love oc"; //定义一个字符串
NSString *str1 = [[NSString alloc] initWithFormat:@"age is %d", 10];
//c字符串转oc字符串
NSString *s2 = [[NSString alloc] initWithUTF8String:"jack"];
//oc字符串转c字符串
const char *s3 = [s2 UTF8String];
URL:资源路径,形式为:协议头://路径。网络资源路径一般用http://...表示,本地资源用file://...表示。
NSString *str = [[NSString alloc] initWithContentsOfFile:@"Macintosh HD/用户/zhushilong/xcode程序/Xcode程序/Foundation框架代码/06-Foundation框架-结构体/bb.txt" encoding:NSUTF8StringEncoding error:nil];
2、集合类( NSArray,NSSet,NSDictionary,NSDate,NSObject)
(1)NSArray/NSMutableArray
NSArray定义的是一个不可变的数组,而NSMutableArray定义的是一个可以改变的数组。数组中可以存放任何的oc对象,但是基本数据类型不能放到数组中。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSArray *array = [NSArray array]; //定义一个数组,但是这样定义的数组之只能为空。
NSArray *a = @[@"jack", @"jim",@"rose"]; //定义不可变数组,快捷方式。此种方法只能创建不可变数组
NSMutableArray *array1 = [NSMutableArray array]; //定义一个可变数组
[array1 addObject:[[NSString alloc] init]]; //为可变数组添加元素
[array1 addObject:@"jack"];
[array1 addObject:@"rose"];
NSLog(@"%ld", array1.count); //输出结果为3
[array1 removeObject:@"jack"]; //移除数组中的对象
[array1 removeObjectAtIndex:0]; //移除数组中的0位置对象
NSLog(@"%ld", array1.count); //输出结果为1
return 0;
}
(2)NSSet
NSSet和NSArray对比:
1> 共同点:*都是结合类;
*都只放oc对象;
*本身不可变,都有一个子类
2> 不同点:*NSSet无序,NSArray有序。
//set方法使用
NSSet *s = [NSSet set]; //创建一个空的set,而且不可改变
//创建一个set字符串,并进行初始化,注意元素是无序的
NSSet *s1 = [NSSet setWithObjects:@"jack", @"jim", @"rose", nil];
NSString *str0 = [s1 anyObject]; //任意去一个元素
(3)NSDictionary/NSDMutableDictionary
在NSDictionary中存储的都是键值对。对应关系为:索引->文字内容, key->value。
//创建一个字典对象,不可变
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
id obj = [dic objectForKey:@"name"]; //查找对象
//快速创建字典方式,注意字典中的对象也是无序的
NSDictionary *dic1 = @{@"name":@"jack", @"address":@"北京"};
id obj1 = dic[@"name"]; //快速提取对象
//创建一个可改变的字典
NSMutableDictionary *dic2 = [NSMutableDictionary dictionary];
[dic2 setObject:@"jack" forKey:@"name"]; //添加字典内容
[dic2 removeObjectForKey:@"name"]; //删除字典元素
------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------