• Objective-C代码简写


     

    NSNumber

    所有的[NSNumber numberWith…:]方法都可以简写了:
    • [NSNumber numberWithChar:‘X’] 简写为 @‘X’;
    • [NSNumber numberWithInt:12345] 简写为 @12345
    • [NSNumber numberWithUnsignedLong:12345ul] 简写为 @12345ul
    • [NSNumber numberWithLongLong:12345ll] 简写为 @12345ll
    • [NSNumber numberWithFloat:123.45f] 简写为 @123.45f
    • [NSNumber numberWithDouble:123.45] 简写为 @123.45
    • [NSNumber numberWithBool:YES] 简写为 @YES
    嗯…方便很多啊~以前最讨厌的就是数字放Array里还要封装成NSNumber了…现在的话直接用@开头接数字,可以简化不少。

    NSArray

    部分NSArray方法得到了简化:
    • [NSArray array] 简写为 @[]
    • [NSArray arrayWithObject:a] 简写为 @[ a ]
    • [NSArray arrayWithObjects:a, b, c, nil] 简写为 @[ a, b, c ]
     
    需要特别注意,要是a,b,c中有nil的话,在生成NSArray时会抛出异常,而不是像[NSArray arrayWithObjects:a, b, c, nil]那样形成一个不完整的NSArray。其实这是很好的特性,避免了难以查找的bug的存在。

    NSDictionary

    既然数组都简化了,字典也没跑儿,还是和Perl啊Python啊Ruby啊很相似,意料之中的写法:
    • [NSDictionary dictionary] 简写为 @{}
    • [NSDictionary dictionaryWithObject:o1 forKey:k1] 简写为 @{ k1 : o1 }
    • [NSDictionary dictionaryWithObjectsAndKeys:o1, k1, o2, k2, o3, k3, nil] 简写为 @{ k1 : o1, k2 : o2, k3 : o3 }
     
    Mutable版本和静态版本
    上面所生成的版本都是不可变的,想得到可变版本的话,可以对其发送-mutableCopy消息以生成一份可变的拷贝。比如
     
    NSMutableArray *mutablePlanets = [@[
    @"Mercury", @"Venus",
    @"Earth", @"Mars",
    @"Jupiter", @"Saturn",
    @"Uranus", @"Neptune" ]
    mutableCopy];
     
    另外,对于标记为static的数组(没有static的字典..哈希和排序是在编译时完成的而且cocoa框架的key也不是常数),不能使用简写为其赋值(其实原来的传统写法也不行)。解决方法是在类方法+ (void)initialize中对static进行赋值,比如:
     
    static NSArray *thePlanets;
    + (void)initialize {
    if (self == [MyClass class]) {
    thePlanets = @[ @"Mercury", @"Venus", @"Earth", @"Mars", @"Jupiter", @"Saturn", @"Uranus", @"Neptune" ];
    }
    }

    下标

    其实使用这些简写的一大目的是可以使用下标来访问元素:
    • [_array objectAtIndex:idx] 简写为 _array[idx];
    • [_array replaceObjectAtIndex:idx withObject:newObj] 简写为 _array[idx] = newObj
    • [_dic objectForKey:key] 简写为 _dic[key]
    • [_dic setObject:object forKey:key] 简写为 _dic[key] = newObject
    很方便,但是一定需要注意,对于字典用的也是方括号[],而不是想象中的花括号{}。估计是想避免和代码块的花括号发生冲突吧…简写的实际工作原理其实真的就只是简单的对应的方法的简写,没有什么惊喜。
    但是还是有惊喜的..那就是使用类似的一套方法,可以做到对于我们自己的类,也可以使用下标来访问。而为了达到这样的目的,我们需要实现以下方法,
    对于类似数组的结构:
     
    - (elementType)objectAtIndexedSubscript:(indexType)idx; </pre>
    - (void)setObject:(elementType)object atIndexedSubscript:(indexType)idx;
     
    对于类似字典的结构:
     
    - (elementType)objectForKeyedSubscript:(keyType)key; </pre>
    - (void)setObject:(elementType)object forKeyedSubscript:(keyType)key;
     
     
     
     
  • 相关阅读:
    VS2012 Unit Test(Void, Action, Func) —— 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试
    string中Insert与Format效率对比、String与List中Contains与IndexOf的效率对比
    VS2012 Unit Test —— 我对接口进行单元测试使用的技巧
    委托又给我惹麻烦了————记委托链的取消注册、获取返回值
    委托的N种写法,你喜欢哪种?
    VS2012 单元测试之泛型类(Generics Unit Test)
    Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
    使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First
    JqueryEasyUI浅谈---视频教程公布
    JqueryEasyUI浅谈本地化应用
  • 原文地址:https://www.cnblogs.com/ios-wmm/p/10216063.html
Copyright © 2020-2023  润新知