zoukankan      html  css  js  c++  java
  • 字典和点语法



    【说明】
        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、英汉字典


  • 相关阅读:
    多层神经网络与C++实现
    反向传导算法的推导
    sizeof()和strlen()的区别与联系
    Pascal’s Triangle
    Multiply Strings
    spring boot 数据源 配置
    spring boot 静态资源。。
    spring boot 配置 beetl 视图解析器
    spring 使用junit
    spring aspectj 注解
  • 原文地址:https://www.cnblogs.com/rainwz/p/4589030.html
Copyright © 2011-2022 走看看