程序员人生 网站导航

吐槽:objective-c反人类

栏目:综合技术时间:2015-04-08 08:07:26

这几天把1段逻辑从服务端搬到客户端,基本上就是把js翻译成oc。直接对照,明显感到oc太烂了(仅针对语言本身,iOS利用框架还凑合)

比以下面这行JS代码:

var monthtag = bill_year + "-" + bill_month;

写成OC以后,非常晦涩。固然用NSMutableString能有个append方法,但是恶心程度也差不多:

NSString *monthTag = [NSString stringWithFormat:@"%@-%@", [NSString stringWithFormat:@"%d", billYear], [NSString stringWithFormat:@"%d", billMonth]];

再比以下面这行:

data[tag].total += bill.amount;

更加不忍直视:

NSMutableDictionary *content = [data objectForKey:tag]; float total = [[content objectForKey:@"total"] floatValue]; float amount = [[bill objectForKey:@"amount"] floatValue]; total += amount; [content setObject:[NSNumber numberWithInt:total] forKey:@"total"];

简单想一想,OC难用主要有几个缘由:

1、强类型,而且隐式的类型转换不发达,需要程序员自己处理

2、各种API设计不方便。Array还差能人意,处理Dictionary时,10分痛苦。其实每次处理NSString,NSDate,NSCalendar时,编程体验也很差

3、不支持闭包(除block),所以如果想拆分函数,要末就传参,要末就定义变量暂存;而js的scope chain就非常方便

包括iOS框架,我感觉都还有1些非常差的设计,比如:在iOS8之前,UIAlertViewDelegate需要根据tag来辨别多个AlertView,还要通过index来辨别按钮点击。到了iOS8,有了UIAlertController才好了1点

说实话我感觉如果不是有苹果罩着,OC应当早就退出历史舞台了。可能苹果自己也意想到这个问题,swift也许有所改良

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐