------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
对于框架这一块,通过学习我感觉这一块就是为大家提供一些公共的工具(写好的类)。对于一些经常用到的东西,Foundation框架已经封装好了,大家可以拿来直接应用
一、结构体
1、NSRange:表示一个范围,它的定义形式为:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
#import <Foundation/Foundation.h>
int main(int argc, const charchar * argv[])
{
NSString *str = @"i love oc"; //定义一个字符串
//利用结构体求出love在字符串中的位置
NSRange range = [str rangeOfString:@"love"];
NSLog(@"%ld, %ld", range.location, range.length); //输出位置,2,4
return 0;
}
2、CGPoint/NSPoint表示一个点,它的形式为:
struct CGPoint {
CGFloat x;
CGFloat y;
};
CGPoint p1 = CGPointMake(12, 10);
x表示点得横坐标,y表示点的纵坐标,CGFloat表示double类型。CGPoint是跨平台的结构体,而NSPoint是非跨平台的。
3、NSSize/CGSize表示一个区域,结构体定义为:
struct CGSize {
CGFloat width;
CGFloat height;
};
CGSize size = CGSizeMake(20, 22);
width表示宽度,height表示高度,CGFloat表示double类型。
4、NSRect/CGRect表示在某个的一个区域,结构体定义为:
typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;
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、把整个结构体转成字符串
NSString *str2 = NSStringFromPoint(p2); //把结构体转换成字符串
NSLog(@"p2 = %@", str2); //输出字符串 输出结果为:p2 = {11,3}
三、字符串
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 charchar *s3 = [s2 UTF8String];
2、集合类(NSArray,NSSet,NSDictionary,NSDate,NSObject)
(1)NSArray/NSMutableArray
NSArray定义的是一个不可变的数组,而NSMutableArray定义的是一个可以改变的数组。数组中可以存放任何的oc对象,但是基本数据类型不能放到数组中。
#import <Foundation/Foundation.h>
int main(int argc, const charchar * 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和NSArray对比:
(a) 共同点:
都是结合类;
都只放oc对象;
本身不可变,都有一个子类
(b)不同点:
NSSet无序,NSArray有序。
//set方法使用
NSSet *s = [NSSet set]; //创建一个空的set,而且不可改变
//创建一个set字符串,并进行初始化,注意元素是无序的
NSSet *s1 = [NSSet setWithObjects:@"jack", @"jim", @"rose", nil 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"]; //删除字典元素