標籤:ios suck
這幾天把一段邏輯從服務端搬到用戶端,基本上就是把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時,十分痛苦。其實每次處理NSString,NSDate,NSCalendar時,編程體驗也很差
3、不支援閉包(除了block),所以如果想拆分函數,要麼就傳參,要麼就定義變數暫存;而js的scope chain就非常方便
包括iOS架構,我感覺都還有一些非常差的設計,比如:在iOS8之前,UIAlertViewDelegate需要根據tag來區分多個AlertView,還要通過index來區分按鈕點擊。到了iOS8,有了UIAlertController才好了一點
說實話我感覺如果不是有蘋果罩著,OC應該早就退出曆史舞台了。可能蘋果自己也意識到這個問題,swift或許有所改善
吐槽:objective-c反人類