当前位置:网站首页>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中类似的效果.
边栏推荐
- 力扣(LeetCode)213. 打家劫舍 II(2022.08.01)
- Ringtone 1161. Maximum In-Layer Elements and
- Install mysql using docker
- Service discovery of kubernetes
- AI target segmentation capability for fast video cutout without green screen
- Use DBeaver for mysql data backup and recovery
- Nanoprobes纳米探针丨Nanogold偶联物的特点和应用
- 2023年起,这些地区软考成绩低于45分也能拿证
- canal同步Mariadb到Mysql
- BioVendor Human Club Cellular Protein (CC16) Elisa Kit Research Fields
猜你喜欢
[Server data recovery] Data recovery case of server Raid5 array mdisk disk offline
IMU预积分的简单理解
CASE2023
The failure to create a role in Dahua Westward Journey has been solved
2022-07-30 mysql8 executes slow SQL-Q17 analysis
From 2023 onwards, these regions will be able to obtain a certificate with a score lower than 45 in the soft examination.
软件测试 接口自动化测试 pytest框架封装 requests库 封装统一请求和多个基础路径处理 接口关联封装 测试用例写在yaml文件中 数据热加载(动态参数) 断言
nacos启动报错,已配置数据库,单机启动
【LeetCode每日一题】——103.二叉树的锯齿形层序遍历
NAS和私有云盘的区别?1篇文章说清楚
随机推荐
使用DBeaver进行mysql数据备份与恢复
BioVendor人俱乐部细胞蛋白(CC16)Elisa试剂盒研究领域
十字光标太小怎么调节、CAD梦想画图算量技巧
Rasa 3.x 学习系列- Rasa - Issues 4873 dispatcher.utter_message 学习笔记
789. 数的范围
Reflex WMS Intermediate Series 7: What should I do if I want to cancel the picking of an HD that has finished picking but has not yet been loaded?
Centos7 install postgresql and enable remote access
nacos启动报错,已配置数据库,单机启动
leetcode / anagram in string - some permutation of s1 string is a substring of s2
【Unity入门计划】2D Game Kit:初步了解2D游戏组成
swift project, sqlcipher3 -> 4, cannot open legacy database is there a way to fix it
【LeetCode Daily Question】——704. Binary Search
Check if IP or port is blocked
60 Feature Engineering Operations: Using Custom Aggregate Functions【Favorites】
使用docker安装mysql
极大似然估计
拼多多借力消博会推动国内农产品品牌升级 看齐国际精品农货
Remember a gorm transaction and debug to solve mysql deadlock
FOFAHUB使用测试
Electronic Manufacturing Warehouse Barcode Management System Solution