iOS开发之基础类的简单初始化方法

先上一个连接:Yak Shaving,2012年的一片博客,题目是:

Objective-C’s New NSNumber, NSArray and NSDictionary Syntaxes Mean Less “Yak Shaving” for iOS and OS X Developers
大概就是关于NSNumber、NSArray、NSDictionary,能够简化初始化操作的新的语法,当然,在两年前是新的……

很多编程语言中都有一些繁琐的操作,oc也不例外,在xcode4.5以后,这种情况得到了改善。(至于yak shaving什么意思,由于英语水平有限,实在是找不到合适的词来解释)。

一般iOS开发或mac开发中经常见到@的地方就是NSString *str = @"hello";这样的语句了,这种初始化方法让我们少些很多东西,如果没有@的话,我们应该这样写

NSString *str = [NSString stringWithString:@"hello"];

甚至是这样:

NSString *str = [NSString alloc] initWithString:@"hello"];

对于数字类型的变量,在xcode4.5之前我们需要这样来封装,才能将其保存在数组、字典中(因为oc中数组和字典只能存放对象):

NSNumber *meaningOfLife = [NSNumber numberWithInt:42];
NSNumber *ussReliantPrefixCode = [NSNumber numberWithUnsignedInt:16309];
NSNumber *floatPi = [NSNumber numberWithFloat:3.14159];
NSNumber *doublePi = [NSNumber numberWithFloat:3.14159265358979];
NSNumber *avogadrosNumber = [NSNumber numberWithDouble:6.02214129E+23];

但是,在xcode4.5之后,就可以这样写了:

NSNumber *meaningOfLife = @42;
NSNumber *ussReliantPrefixCode = @16309U;
NSNumber *floatPi = @3.14159F;
NSNumber *doublePi = @3.14159265358979;
NSNumber *avogadrosNumber = @6.02214129E+23;

其实对于数字类型的封装还不算太麻烦,如果需要封装数组或者词典,就会挺繁琐的,在js、python、ruby中,我们可以这样写一个数组:

starkFamily = [
    "Eddard",
    "Catelin",
    "Robb",
    "Sansa",
    "Arya",
    "Bran",
    "Rickon"
]

在oc中初始化一个数组需要这样写:

NSArray *starkFamily = [NSArray arrayWithObjects:
    @"Eddard",
    @"Catelin",
    @"Robb",
    @"Sansa",
    @"Arya",
    @"Bran",
    @"Rickon",
    nil
];

取某个元素需要这样:

[starkFamily objectAtIndex:2]

事实上,在xcode4.5之后我们可以简写成这样

NSArray *starkFamily = @[
    @"Eddard",
    @"Catelin",
    @"Robb",
    @"Sansa",
    @"Arya",
    @"Bran",
    @"Rickon"
];

以及
starkFamily[2];
至于字典,我们可以简写成这样:

NSDictionary *importantNumbers = @{
    @"Meaning of life" : @42,
    @"USS Reliant prefix code" : @16309U,
    @"Single-precision pi" : @3.14159F,
    @"Double-precision pi" : @3.14159265358979,
    @"Avogadro's Number" : @6.0221415E+23
};

当然,如果需要可变的字典,就得改成这样了:

NSMutableDictionary *importantNumbers = [@{
    @"Meaning of life" : @42,
    @"USS Reliant prefix code" : @16309U,
    @"Single-precision pi" : @3.14159F,
    @"Double-precision pi" : @3.14159265358979,
    @"Avogadro's Number" : @6.0221415E+23
} mutableCopy];

取值和设值可以这样写:

importantNumbers[@"Meaning of life"];
importantNumbers[@"Meaning of life"] = @43;

好吧……偷懒了……实在不想按照原文逐字翻译,就把实例都给照搬过来了……

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值