吐槽:objective-c反人類
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-04-08 08:07:26 閱讀次數(shù):8740次
這幾天把1段邏輯從服務(wù)端搬到客戶端,基本上就是把js翻譯成oc。直接對(duì)照,明顯感到oc太爛了(僅針對(duì)語(yǔ)言本身,iOS利用框架還湊合)
比以下面這行JS代碼:
var monthtag = bill_year + "-" + bill_month;
寫(xiě)成OC以后,非常晦澀。固然用NSMutableString能有個(gè)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"];
簡(jiǎn)單想一想,OC難用主要有幾個(gè)緣由:
1、強(qiáng)類型,而且隱式的類型轉(zhuǎn)換不發(fā)達(dá),需要程序員自己處理
2、各種API設(shè)計(jì)不方便。Array還差能人意,處理Dictionary時(shí),10分痛苦。其實(shí)每次處理NSString,NSDate,NSCalendar時(shí),編程體驗(yàn)也很差
3、不支持閉包(除block),所以如果想拆分函數(shù),要末就傳參,要末就定義變量暫存;而js的scope chain就非常方便
包括iOS框架,我感覺(jué)都還有1些非常差的設(shè)計(jì),比如:在iOS8之前,UIAlertViewDelegate需要根據(jù)tag來(lái)辨別多個(gè)AlertView,還要通過(guò)index來(lái)辨別按鈕點(diǎn)擊。到了iOS8,有了UIAlertController才好了1點(diǎn)
說(shuō)實(shí)話我感覺(jué)如果不是有蘋(píng)果罩著,OC應(yīng)當(dāng)早就退出歷史舞臺(tái)了。可能蘋(píng)果自己也意想到這個(gè)問(wèn)題,swift也許有所改良
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)