一、NSSet、NSMutableSet:一个不可变的集合,与数组的区别,它没有顺序
例子:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
int main() {
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
NSLog(@"%@", str);
//NSLog(@"%ld", s2.count);
//----------------------NSMutableSet----------------------------------------
NSMutableSet *s = [NSMutableSet set];
// 添加元素
[s addObject:@"hack"];
// 删除元素
// [s removeObject:<#(id)#>];
return 0;
}</span>
----------------------------------------------------------------------------------------------------------------------------------------------------------
二、NSDictionary、NSMutableDictionary:字典与可变字典,相当于JAVA种的MAP,字典中的每一个object都有对应的key,通过key来找这个object,值得注意的是它同样没有顺序。
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
int main() {
/*
字典:
key ----> value
索引 ----> 文字内容
里面存储的东西都是键值对
*/
// 字典的创建,不常用
// NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
// NSArray *keys = @[@"name", @"address"];
// NSArray *objects = @[@"jack", @"北京"];
// NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
/*
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"32423434", @"qq", nil];*/
//最简单创建字典方式
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
//获取字典中的元素,不常用
// id obj = [dict objectForKey:@"name"];
//根据key快速查找字典中的object
id obj = dict[@"name"];
NSLog(@"%@", obj);
// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
//--------------------NSMutableDictionary--------------
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
//字典中key不可以相同,但object可以相同
// [dict setObject:@"rose" forKey:@"name"];
// 移除键值对
// [dict removeObjectForKey:<#(id)#>];
NSString *str = dict[@"name"];
NSLog(@"%@", dict);
return 0;
}</span>
字典的遍历:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
int main() {
// 字典不允许有相同的key,但允许有相同的value(Object)
// 字典的无序的
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};
//传统方式遍历字典,比较麻烦
// NSArray *keys = [dict allKeys];
//
// for (int i = 0; i<dict.count; i++)
// {
// NSString *key = keys[i];
// NSString *object = dict[key];
//
//
// NSLog(@"%@ = %@", key, object);
// }
//利用block快速遍历
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// *stop = YES;
}];
// -------------------多层嵌套取值-----------------------
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];
//
// NSDictionary *jim = persons[2];
//
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"];
//NSLog(@"%@", array);
// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]);
// NSLog(@"%@", jim);
return 0;
}</span>
----------------------------------------------------------------------------------------------------------------------------------------------------------
三、NSNumber:将一个基本数据类型包装成对象(结构体等类型除外)
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
int main() {
//将10这个数字包装成对象放进字典
NSNumber *num = [NSNumber numberWithInt:10];
NSDictionary *dict = @{
@"name" : @"jack",
@"age" : num
};
NSNumber *num2 = dict[@"age"];
int a = [num2 intValue];
NSLog(@"%d" , a);
// -----------------快速包装---------------------------
// @20 将 20包装成一个NSNumber对像
NSArray *array = @[
@{@"name" : @"jack", @"age" : @20},
@{@"name" : @"rose", @"age" : @25},
@{@"name" : @"jim", @"age" : @27}
];
// 将各种基本数据类型包装成NSNumber对象
@10.5;
@YES;
@'A'; // NSNumber对象
@"A"; //区分于NSString对象
// 将age变量包装成NSNumber对象
int age = 100;
@(age);
//[NSNumber numberWithInt:age];
NSNumber *n = [NSNumber numberWithDouble:10.5];
//取值
int d = [n doubleValue];
int a = 20;
// @"20"
NSString *str = [NSString stringWithFormat:@"%d", a];
NSLog(@"%d", [str intValue]);
return 0;
}</span>
----------------------------------------------------------------------------------------------------------------------------------------------------------
四、NSValue:NSNumber的父类,可以包装结构体
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
int main() {
// 结构体--->OC对象
CGPoint p = CGPointMake(10, 10);
// 将结构体转为Value对象
NSValue *value = [NSValue valueWithPoint:p];
// 将value转为对应的结构体
// [value pointValue];
NSArray *array = @[value ];
return 0;
}</span>
----------------------------------------------------------------------------------------------------------------------------------------------------------
五、NSDate:专门用来处理时间的类,比我们自己表达好很多,它提供了许多方法。
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
int main() {
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的时候是0时区的时间(北京-东8区)
NSLog(@"%@", date);
//根据date时间延迟5秒后的时间
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
//从调用date2到现在共多少秒
// [date2 timeIntervalSinceNow];
// ----------------日期转字符串-----------------------
//如果我们想在用户手机上显示时间,就必须要把date转成字符串
NSDate *date = [NSDate 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];
NSLog(@"%@", str);
// ----------------字符串转日期-----------------------
// 09/10/2011
NSString *time = @"2011/09/10 18:56";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);
return 0;
}</span>