字典和点语法



【说明】
    1、字典是OC中特有的类型,用于存放OC的对象
    2、字典中的对象是没有顺序的
    3、字典中的对象是以【键(key)值(value)对】的形式出现
    4、键是为了查找值而存在的,是为了快速的查找到值
    5、任何对象都可作为键,但是常用字符串作为键

一、不可变字典(NSDictionary)
1、创建
NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3", nil];
//其中:@"one",@"1"、@"two",@"2"、@"three",@"3"是三个不同的键值对 @"1",@"2",@"3"是键,@"one",@"two",@"three"是值
NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"I",@"1",@"II",@"2",@"III",@"3", nil];      
NSDictionary *dic3 = @{@"1":@"Mon",@"2":@"Tue",@"3":@"Wed"};
//通过所有的键和所有的值创建字典
NSDictionary *dic4 = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
//通过一个字典创建另一个字典
NSDictionary *dic5 = [NSDictionary dictionaryWithDictionary:dic4];

2、返回键值对个数
NSUInteger count = [dic3 count];

3、通过键返回值
NSString *str = [dic2 objectForKey:@"2"];

4、返回所有的键或值
//返回所有的键
NSArray *keys = [dic1 allKeys];
//返回所有的值
NSArray *values = [dic1 allValues];

5、快速枚举遍历字典
for (id obj in dic3) {
    //遍历字典只能遍历键,可以通过键找到值
    NSLog(@"%@", [dic3 objectForKey:obj]);
}

二、可变字典(NSMutableDictionary)
1、设置字典
[mDic setDictionary:@{@"1":@"A",@"2":@"B"}];

2、添加或设置键值对
[mDic setValue:@"C" forKey:@"3"];
//若添加的键值对的键不存在,则会直接添加
[mDic setValue:@"D" forKey:@"3"];
//若添加的键值对的键已存在,则会修改该键对应的值

3、删除键值对
//根据键删除对应的键值对
[mDic removeObjectForKey:@"2"];
//删除某个数组中包含的键对应的键值对
[mDic removeObjectsForKeys:@[@"1",@"2"]];
//删除所有的键值对
[mDic removeAllObjects];

三、点语法
【说明】
    大多数的成员变量都有两个方法setter和getter,
    凡是满足特定格式的都可使用点语法的形式。
    int _age;
    - (void) setAge:(int)age;
    - (int)age;
    若一个类中有大量的成员变量,每个成员变量都需要这两个方法;
    这样势必会造成书写繁琐,鉴于此OC提供了专门的标准的格式

【@property和@synthesize】
【使用说明】
@property int age;
//这句话相当于声明了_age的setter和getter方法
//同时也实现了_age的setter和getter方法
//若成员变量_age没有定义,会自动定义个_age成员变量
@synthesize age = _age;
//这个式子相当于实现了_age的setter和getter方法

【属性修饰符】
//设置为只读,只有getter方法
@property (readonly) int age;
//readwrite同时实现setter和getter方法,默认属性
@property (readwrite) int weight;
//原子操作,不可被打断
@property (atomic) int height;
//非原子操作,可以提高效率,多个用逗号隔开
@property (readonly,nonatomic) NSString *name;
//直接赋值,不做内存管理
@property (assign) NSString *color;
//关联非标准的setter和getter方法
@property (setter=setDogKind:) NSString *kind;

四、选择器(selector)
【特点】
    1、是一种数据类型SEL
    2、SEL类型的变量用于存放方法的

【使用】
    1、创建SEL类型的变量
            //定义SEL类型的变量(编译时)
    SEL sel = @selector(eat);
    //动态的创建SEL变量(运行时)
    SEL sel2 = NSSelectorFromString(@"eat");

     //在执行时直接创建SEL变量没有警告
    [cat performSelector:@selector(eat)];

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
     //这样使用会有警告,加上外面语句可以忽略
     [cat performSelector:sel2];
#pragma clang diagnostic push

            //通过selector调用方法时,若方法没有实现会导致崩溃

    2、判断某个类是否实现了selector中的方法
    //判断对象所属的类是否实现了selector中的方法    
            [cat respondsToSelector:sel2]

练习题:
1、创建学生类,成员变量有姓名,年龄和成绩。用学生类,
      创建三个学生对象,将三个学生添加到字典中,
      以学生的名字作为key。输入一个学生的名字,
      打印出该学生的完整信息
    (学生对象是值,学生名字的字符串是key)
2、昨天第4题
      给可变数组添加一个方法 -(void)sortWithSelector:(SEL)sel;
      - (BOOL)isOlderAgeThan:(JYStudent *)aStu;
      要求:先完善代码,然后不做参考自己实现一遍    
3、英汉字典


原文地址:https://www.cnblogs.com/rainwz/p/4589030.html