当前位置:网站首页>OC和Swift语言的区别
OC和Swift语言的区别
2022-08-02 02:23:00 【~废弃回忆 �༄】
一.编程范式
Swift可以面向协议编程,函数式编程,面向对象编程.
OC已面向对象编程为主,当然你可以引入类似ReactiveCocoa的类库来进行函数式编程.
二.类型安全
Swift是一门类型安全的语言.鼓励程序员在代码中清楚明确值得类型.如果在代码中使用一个字符串String,那么你不能错误地传递一个整型int给它.因为Swift是类型安全的,他会在代码编译的时候做类型检查,并且把所有不匹配的类型作为一个错误标记出来.
而OC则不然,你声明一个NSString变量,仍然可以传一个NSNumber给它,尽管编译器会抱怨,但是你仍然可以作为NSNumber来使用它.
三.值类型
在Swift中,典型的有Struct,enum以及tuple都是值类型.而平时使用的int ,double,float,string,Array,Dictionary,Set其实都是使用结构体实现的,也是值类型.
OC中,NSNumber,NSString以及集合类对象都是指针类型.
四.枚举增强
Swift的枚举可以使用整型,浮点型,字符串,还能拥有属性和方法,甚至支持泛型,协议,扩展等等.
OC中的枚举鸡肋则很多.
五.泛型
Swift中支持泛型,也支持泛型的类型约束等特性.
苹果推出了Swift2.0版本,为了让开发者从OC更好的过渡到Swift上,苹果也为OC带来了Generics泛型支持,不过OC的泛型也仅停留在编译器警告阶段.
六.协议和扩展
Swift对协议的支持更加丰富,配合扩展(extension),泛型,关联类型等可以实现面向协议编程,从而大大提高代码的灵活性.同时,Swift中的protocol还可以用于值类型,如结构体和枚举.
OC的协议缺乏强约束,提供的optiional特性往往成为很多问题的来源,而如果放弃optional又会让实现代价过大.
七.函数赫尔闭包
Swift函数一等公民,可以直接定义函数类型变量,可以作为其他函数参数传递,可以作为函数返回值返回.
OC里面函数仍然是次等公民,需要selector封装或者使用block才能模拟Swift中类似的效果.
边栏推荐
- Nanoprobes多组氨酸 (His-) 标签标记:重组蛋白检测方案
- swift项目,sqlcipher3 -> 4,无法打开旧版数据库有办法解决吗
- 2022 Henan Youth Training League Game (3)
- Nanoprobes免疫测定丨FluoroNanogold试剂免疫染色方案
- Remember a pit for gorm initialization
- 欧拉公式的证明
- 极大似然估计
- 【LeetCode每日一题】——704.二分查找
- Moonbeam and Project integration of the Galaxy, bring brand-new user experience for the community
- canal同步Mariadb到Mysql
猜你喜欢

Analysis of the status quo of digital transformation of manufacturing enterprises

qt点云配准软件

FOFAHUB usage test

Nanoprobes多组氨酸 (His-) 标签标记:重组蛋白检测方案

Safety (2)

【Unity入门计划】2D Game Kit:初步了解2D游戏组成

Scheduled tasks for distributed applications in Golang

Talking about the "horizontal, vertical and vertical" development trend of domestic ERP

Personal blog system project test

Golang分布式应用之定时任务
随机推荐
oracle query scan full table and walk index
PHP uses PHPRedis and Predis
Remember a pit for gorm initialization
【 wheeled odometer 】
TKU remembers a single-point QPS optimization (I wish ITEYE is finally back)
Software testing Interface automation testing Pytest framework encapsulates requests library Encapsulates unified request and multiple base path processing Interface association encapsulation Test cas
[LeetCode Daily Question] - 103. Zigzag Level Order Traversal of Binary Tree
JVM调优实战
789. 数的范围
优炫数据库导库导错了能恢复吗?
canal同步Mariadb到Mysql
Talking about the "horizontal, vertical and vertical" development trend of domestic ERP
swift project, sqlcipher3 -> 4, cannot open legacy database is there a way to fix it
Ringtone 1161. Maximum In-Layer Elements and
C language inserted into the characters of simple exercises
NIO's Sword
Use DBeaver for mysql data backup and recovery
Centos7 安装postgresql并开启远程访问
openGauss切换后state状态显示不对
字符串常用方法