黑马程序员-iOS基础-Foundation框架基础

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员-iOS基础-Foundation框架基础

一、Foundation框架基础

   作用:Foundation框架是其他所有IOS框架的基础

   包含了很多开发中常用的数据类型:结构体;枚举;类等。

   使用方法: 想要使用Foundation框架中的数据类型,包含它的主文件即可

二、OC结构体

1、NSRange(范围)

 成员:

  location位置:NSUInteger

  length长度:NSUInteger

 定义方式

 要求掌握

   NSMakeRange(int location, int length);

   NSString的rangeOfString方法
    
   在查找字符串的情况下,如果可以查找到,则location是有一个正值的,但如果查找不到,返回的是NSNotFound,而且NSNotFound=-1。

2、NSPoint/CGPoint

 成员:两个CGFloat/double型变量x和y

 作用:用来表示屏幕上的一个点

 定义方式
  
 开发中常用CGPoint(跨平台)

 定义函数

  NSMakePoint

  CGPointMake

3、NSSize/CGSize

 成员:两个CGFloat/double型变量width和height

 作用:用来表示UI元素的尺寸

 定义方式

 定义函数

  NSMakeSize

  CGSizeMake

4、NSRect/CGRect

 成员:

  CGPoint(Rect左上角点的位置)

  CGSize

 作用:表示屏幕上的一块区域

 定义方式

 定义函数

  NSMakeRect

  CGRectMake

5、将结构体转换为字符串的函数

 NSStringFromRange

 NSStringFromPoint

 NSStringFromSize

 NSStringFromRect

举例:
 
 

6、常量

 CGPointZero指坐标原点

 CGSizeZero

 CGRectZero

 使用CG开头的常量和函数要添加CoreGraphics框架

7、其他用法

 CGPointEqualToPoint 比较两个点释放相同,另有相同的Size和Rect函数

 CGRectContainsPoint 判断举行是否包含某个点

三、Foundation常用类

1、NSString字符串

    字符串创建

            对象方法

                    1.最普通简单的字符串

 NSString *s1 = @"4654651"; 

                    2.带参数的组合字符串

[[NSString alloc] initWithFormat:@"age is %d", 10];

                    3.C字符串转换为OC字符串

[[NSString alloc] initWithUTF8String:"Jack"];

                    4.从文件读取字符串

NSString *s4 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil ];   
// NSUTF8StringEncoding 用到中文就可以用这种编码

                    5.从本地或者网络读取资源转换成字符串

    NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"]
    NSString *s5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil ];
    // URL: 资源路径
    // 协议头://路径   Http://->网络   file://->本地   ftp://->

             类方法(常用)

        NSString *s6 = [NSString stringWithFormat:@"5465"];
	NSString *s7 = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil ];
	 // 创建本地文件的URL
	NSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];
	 // 最普通的创建URL的类方法
	NSURL *url2 = [NSURL URLWithString:@"file:///Users/apple/Desktop/1.txt"];
	NSString *s8 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil ];

 字符串的导出

[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/1.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil ];
	    // atomically:原子性:若写入新文件时中断,YES则文件不会创建,NO时会创建
//另有类似的writeToURL方法

 子类NSMutableString可变字符串(继承自NSString,拥有NSString的方法)

  字符串拼接

   appendString

   appendFormat

  删除字符串中某个范围内的字符

        // 删除s1中的is方法1
	[s1 deleteCharactersInRange:NSMakeRange(4, 2)];
	// 删除s1中的is方法2
	NSRange range = [s1 rangeOfString:@"is"]; // 获取is的范围
	[s1 deleteCharactersInRange:range];

 2、NSArray数组

        数组的创建

             OC数组只能存放OC对象,不能存放非OC对象类型,如int、struct、enum等

             不能存放nil值

	// 创建数组
	NSArray *array = [NSArray array]; // 这个array永远是空数组
	NSArray *arr1 = [NSArray arrayWithObject:@"Jack"];
	NSArray *arr2 = [NSArray arrayWithObject:@"Jack", @"Rose", nil]; // nil是数组元素结束的标记
	NSArray *arr3 = @[@"Jack", @"Rose", @"dack"]; // 快速创建一个NSArray对象,尽量用这种

        获取数组元素个数

    // 获取数组元素个数
    [arr2 count];
    arr2.count; // count是获取数组元素个数的方法 

        访问数组中的元素

    // 访问数组中的元素
    [arr2 objectAtIndex:1]; // 最原始的方法
    arr2[0];// OC编译器特性也支持此格式

        遍历数组中的元素

        // 遍历数组中的元素
	NSArray *arr4 = @[@"Jack", @"Rose", @"dack", @"bitch", @"fuck", nil];
	// 最普通的写法
	for(int i = 0 ; i < arr4.count ; i++)
	{
		NSLog(@"%@", arr4[i]);
	}
	// 快速遍历,id obj代表数组中的每一个元素
	for(id obj in arr4)
	{
		// 找出obj元素在数组中的位置
		NSUInteger i = [arr4 indexOfObject:obj];
		NSLog(@"%ld - %@", i, obj);
	}
	// block遍历
	[arr4 enumerateObjectsUsingBlock:
		// 每遍历到一个元素,就调用一次block
		// 并且当前元素和索引位置当做参数传给block
		^(id obj, NSUInteger idx, BOOL *stop){
			NSLog(@"%ld - %@", idx, obj);
			// 停止遍历
			if(idx == 1)
			{
				*stop = YES;
			}
	}];

        子类NSMutableArray可变数组

        NSMutableArray *marray = [NSMutableArray array];
	NSMutableArray *marray1 = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
	// OC数组不能放基本数据类型、结构体、枚举等,也不可以是nil
	// addObject:向可变数组中添加元素
	[marray addObject:[[Person alloc] init]];
	[marray addObject:@"Jack"];
	/* 错误写法
	[marray addObject:10];
	[marray addObject:nil];
	*/
	// 移除所有元素
	[marray removeAllObjects];
	// 移除指定元素
	[marray1 removeObject:@"Jack"];
	// 按索引移除指定元素
	[marray removeObjectAtIndex:2];

	// 错误写法
	// @[] 只创建不可变数组NSArray
	NSMutableArray *array = @[@"jack", @"rose"];
	[array addObject:@"jim"];

3、NSSet

创建方法

      set 创建,没有元素

      setWithObject 单个元素

      setWithObjects 多个元素

访问元素

      anyObject 随机,不确定是哪个

元素个数

      count

如:

	NSSet *s = [NSSet set];
	NSSet *s2 = [NSSet setWithObjects:@"jack", @"rose", @"scort", @"sam", nil]; // 初始化set

	NSString *str = [s2 anyObject]; // 访问set中的元素
	NSLog(@"%@", str);
	NSLog(@"%ld", s2.count);

子类NSMutableSet

      set 创建

      addObject 增加元素

      removeObject 移除指定元素元素

	NSMutableSet *s = [NSMutableSet set];
	[s addObject:@"hack"]; // 添加元素
	[s removeObject:@"jack"]; // 移除元素

NSSet与NSArray的异同点

 1、共同点

  * 都是集合,都能存放多个OC对象

  * 只能存放OC对象,不能存放非OC对象类型,如基本数据类型、结构体struct、枚举enum

  * 都有一个可变的子类,本身是不可变的

 2、不同点

  * NSArray是有顺序的,NSSet没有顺序

4、NSDictionary字典

 创建

        NSDictionary *dict4 = @{@"name" : @"jack", @"address" : @"Beijing", @"QQ" : @"djaf"};
        // 此处是利用了编译器特性,将键值对逐个写入,但是存储时是无序的
        // 创建只有一个键值对的字典
	NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]
	// 根据键值数组创建多个键值对的字典
	NSArray *keys = @[@"name", @"address"];
	NSArray *objects = @[@"jack", @"Beijing"];
	NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
	
	// 创建多个键值对的字典
	NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
		@"jack", @"name",
		@"Beijing", @"address",
		@"45123", @"QQ", nil];

 访问键值对

        // 根据键获取对应值
	id obj = [dict ObjectForKey:@"name"];
	// 编译器特性快速获取键值
	id obj = dict[@"name"];

 统计键值对数

NSLog(@"%ld", dict.count); // count返回键值对数

 字典的遍历

        // 字典不允许有相同的key,但允许有相同的value
	// 字典是无序的
	// 遍历
	NSDictionary *dict4 = @{@"name" : @"jack", @"address" : @"Beijing", @"QQ" : @"djaf"};
	// 用for循环遍历
	NSArray *keys = [dict4 allKeys]; // 取key至一个数组中,但key无序
	for(int i=0; i<dict.count; i++)
	{
		NSString *key = keys[i];
		NSString *object = dict[key];
		NSLog(@"%@ = %@", key, object);
	}
	
	// 用block遍历 (提示的时候双击或者回车即可)
	[dict4 enumerateKeysAndObjectsUsingBlock:
		^(id key, id obj, BOOL *stop){
			NSLog(@"%@ = %@", key, obj);

			*stop = YES; // 遍历一次即退出
	}];

 子类NSMutableDictionary

        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
	// 添加键值对,没有顺序之分的
	[dict setObject:@"jack" forKey:@"name"];
	[dict setObject:@"Beijing" forKey:@"address"];
	[dict setObject:@"rose" forKey:@"name"]; // 这里会把前面对应的值覆盖掉

	[dict removeObjectForKey:@"name"]; // 根据键移除键值对

	NSLog(@"%@", dict);

	/* 错误写法  @{key : value,...}返回值是不可变字典
	NSMutableDictionary *dict = @{@"name" : @"jack", @"address" : @"Beijing", @"QQ" : @"djaf"};
	[dict setObject:@"rose" forKey:@"name"];
	*/


5、NSNumber

 作用:将基本数据类型包装为OC对象

 创建方法:

  @+数字(编译器特性)

        // 编译器特性 @+number 创建NSNumber类型对象
	NSNumber *nn = @30;
	int age = 100;
	@(age); // 将age包装成NSNumber对象
	// 将各种基本数据类型包装成NSNumber对象
	@10.5;
	@YES
	@'a' // NSNumber对象
	@"a" // NSString对象

  其他

	// NSNumber的创建
	NSNumber *num = [NSNumber numberWithInt:10]
	NSNumber *n = [NSNumber numberWithDouble:10.5];

  基本数据类型与NSString类型转换

	// 基本数据类型与NSString类型转换
	int a = 20;
	NSString *str = [NSString stringWithFormat:"%d", a];
	int e = [str intValue];

  基本数据类型与NSNumber类型转换

	// 基本数据类型与NSNumber类型转换
	NSNumber *n = [NSNumber numberWithDouble:10.5];
	double d = [n doubleValue];


 6、NSValue

 作用:将非OC类型包装成OC对象

  NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue

        // NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
	CGPoint p = CGPointMake(10, 10);
	// 将结构体包装为Value对象
	NSValue *value = [NSValue valueWithPoint:p];
	// 解包装为NSPoint/CGPoint类型
	[value pointValue]; 

7、NSDate

 作用: 对时间进行操作

 方法

  创建方法

        // 创建一个时间对象
	NSDate *date = [NSDate date];

  其他方法

	// 创建一个时间对象
	NSDate *date = [NSDate date];
	// 打印的时间是0时区格林尼治时间(北京-东八区)
	NSLog(@"%@", date);
	// 比date晚5秒的时间
	NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
	// 从1970年开始走过的秒数
	NSTimeInterval seconds = [date2 timeIntervalSince1970];

 时间格式化,需要调用NSDateFormatter类

NSDate不能直接在屏幕显示,必须转换成NSString

  NSDate->NSString

        // 时间格式化
	NSDate *date = [NSDate date];
	// 显示Date必须先转换成字符串
	// 日期格式化类
	NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
	// y 年 M 月 d 日 m 分 s 秒 H (24)时 h(12)时
	formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; 
	NSString *str = [formatter stringFromDate:date];

  NSString->NSDate

	// 字符串时间转换为NSDate型
	NSString *time = @"2011/09/10 18:16";
	NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
	formatter.dateFormat = @"yyyy-MM-dd HH:mm";
	NSDate *date3 = [formatter dateFromString:time];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值