这几天把一段逻辑从服务端搬到客户端,基本上就是把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或许有所改善
分享到:
相关推荐
腾讯手机QQ共享WiFi密码引吐槽:新功能已下架.docx
总共有16384个槽,每个数据键映射到特定的槽上,从而决定其在哪个节点上存储。 3. **主从复制(Master-Slave Replication)**:每个节点可以有多个从节点,主节点负责写操作,从节点复制主节点数据并执行读操作,提高...
web登录页面
那么B对象只需要有一个信号,当点击按钮的时候,发射信号,通知A上的槽执行功能即可。...A上还得有2个对象:this,还得有一个B的...一个槽负责: A-->B。另一个槽负责: B-->A。顺序如下: A--->B-->A。A的源文件:a.cpp。
1. QtCore:包含了非GUI类的核心部分,如事件循环、信号和槽机制以及平台无关的抽象。 2. QtGui:提供了大部分GUI类,包括表格和复杂的2D画布小部件。 3. QtOpenGL:允许在渲染3D图形时使用OpenGL。 4. QtSql:与...
要求A界面为主界面先显示,那就得把其他界面对象及功能槽都放到A界面类里面来,其他的2个界面B、C只需要负责发信号来触发功能即可。有3个槽:A-->B 的槽;A类: 有3个对象:this,B对象,C对象。 核心代码在包中给了...
1. **面向对象编程基础**:Objective-C作为面向对象的语言,其核心概念如类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装(Encapsulation)等将贯穿整个项目。开发者可能已经创建了...
- **反铲、拉铲挖土机开挖**: - 端头挖土法:挖土机从端头以倒退行驶的方法开挖,自卸汽车配置在两侧装运土。 - 侧向挖土法:挖土机沿着一侧移动,自卸汽车在另一侧装运土。 - **安全距离**:挖土机沿挖方边缘...
KDAB的KDMacTouchBar项目中涉及了Objective-C++,这是一种结合了C++和Objective-C的编程语言,特别适合在苹果生态系统中编写代码。Objective-C++允许开发者使用C++的面向对象特性同时访问Objective-C的Foundation...
在".NET 三层架构制作吐槽网"项目中,我们看到这个应用可能包含用户登录、内容查看、信息发布、评论互动以及点赞功能,这些都是社交媒体平台的基础元素。下面将详细讲解这些知识点。 首先,三层架构主要分为以下三...
V-King Pro 3d打印机Roy Berntsen的无杆CoreXY V-Slot 3d打印机在此存储库中,您将找到V-King 3D打印机的打印文件和文档。... 社区链接: : : 这是一段视频,介绍了此设计的基本知识和好处: : 除非在文件或目录中指定...
一个快速高效的端口扫描工具,制定IP段扫描端口,还可以对部分路由器读取路由器相关用户信息。支持路由器或服务器型号:XM-3300N- ASUS- D-Link- LevelOne- Netis- Pozitron- TP-LINK支持端口:8080,80,8888,8081...
- **槽型尺寸**:具体尺寸见下表: | 参数 | 尺寸 | |--------|------------| | 槽口宽 | 0.002mm | | 槽口深 | 0.0015mm | | 槽肩宽 | 0.005mm | | 槽肩深 | 0.0015mm | | 槽底宽 | 0.01mm | | 槽身深 | ...
一个留言类型的网站,适合新手。吐槽网站。特别适合新手进行学习。也可以直接使用。
- **环境温度**:-25°C至+85°C - **防护等级**:IP65 #### 七、总结 欧姆龙光电开关EE-SX67/47系列以其高精度、可靠性和广泛的适用性,在自动化控制系统中发挥着重要作用。通过合理选择型号、正确的接线以及适当...
吐槽 特色 首页六大模块,推荐,新番,影剧,游戏,动画,频道 全站排行榜,支持每日/每周排序 放映时间表,可以查看周一到周日新番的更新情况 频道列表,支持按照发布时间/播放量/弹幕排序 视频搜索,支持分频道...
完整英文电子版 IEC 60068-2-58:2017 Environmental testing - Part 2-58:Tests - Test Td:Test methods for solderability, ... 焊槽法适用于流焊设计的SMD和回流焊设计的SMD,当焊槽(浸渍)方法合适时。
- 解析:正槽溢洪道的泄槽底坡通常采用比临界坡降更陡的斜坡,以加快水流速度。 26. **整体式平底板的计算方法** - 正确 - 解析:整体式平底板在计算时,可以将其沿顺水流方向截取板条作为梁进行分析。 27. *...
我们可以利用Qt的信号与槽机制,当滚动条被激活时,使其临时出现,而当不再需要时隐藏。这样,滚动条在不影响内容显示的同时,又能提供必要的导航功能。 为了深度美化滚动条,我们需要使用Qt的样式表(QSS,Qt ...
"火箭"是一个专门为C++设计的快速单头信号槽库,它旨在提供一种高效、简洁的方式来实现对象间的通信。在C++编程中,信号和槽机制是一种常用的事件处理模式,常用于实现组件间的异步通信。这个库尤其适用于那些对性能...