文章目录

  • swift发展趋势
    • 强大的背景
    • 语言排行榜
  • Swift优势
    • 优势一:更快
    • 优势二:安全
    • 优势三:更具表达性
    • 优势四:代码量大大减少
    • 优势五:降低交叉Review成本
  • 参考

  • Swift目前已经形成了一个 完善的Apple开发生态,苹果也是发力推这个,
  • 而且从语言的排行榜也可以看出,swift一直在网上走,
  • 而且swift使用时效率更快,
  • 并且更加安全,因为每一个输入都有一个明确的类型,很少导致对象类型不符的crash,
  • 然后就是更具表达性,就是用很少的代码表达一段完整的逻辑,通过struct和enum类型可以实现这些功能,例如:同时传入的值同时遵循多个协议,Swift可以直接用&实现,而OC需要额外定义一个协议遵守另外的多个协议来处理,
  • 同时 Swift代码量明显减少,可读性更强。
  • 他的语法和安卓的Kotlin很像,我们双端如果是通过Swift+kotlin实现的话,可以很轻松的进行交叉review

毫无疑问,Swift是大势所趋,我认为,相比于OC,Swift更适用于未来

swift发展趋势

强大的背景

从 Chris Lattner 开始设计 Swift 到现在已经十年过去了,每年都有逐渐完善。现在已经成为了构成了一个特别玩完善的Apple开发生态,期间,WWDC对外输出的内容近百。

语言排行榜

首先通过 TIOBE排行榜,我们就可以了解到,swift现在的受欢迎程度,一直都是上升趋势,现在已经排名第10名,而OC已经排在 20 名之外了。

从社区的语言排行榜来看,虽然乍一看,感觉还是 Swift 和 Objective-C 共存的大环境,但其实背后也反映出,Swift 已经被大部分开发者所接受了。

Swift优势

优势一:更快

Swift再执行效率上边做了很多优化,比如:系统库有很多不需要引用计数的基础类型,

优势二:安全

所谓的安全不等于不发生Crash, 而是指任何的输入都有一个比较明确的表现定义, Swift 是一门类型安全的语言。鼓励程序员在代码中清楚明确值的类型。如果代码中使 用一个字符串 String,那么你不能错误地传递一个整型 Int 给它。因为 Swift 是类型安 全的,它会在代码编译的时候做类型检查,并且把所有不匹配的类型作为一个错误标记 出来。这样使得程序员在开发中尽可能早地发现和修正错误。
而 Objective-C 则不然,你声明一个 NSString 变量,仍然可以传一个 NSNumber 给 它,尽管编译器会抱怨,但是你仍然可以作为 NSNumber 来使用它。
由于我司最新代码使用了Swift,所以在平时的代码review中,对于这种类型错误可以节省人力,而且在后期的crash率,有很大的降低。

优势三:更具表达性

更具表达性就是说用更少的代码表达一段完整的逻辑, 整体来说,Swift的代码量比OC少了大概 30% - 50%。下方链接有很多增强Swift的表达式,可以参考。https://apple.github.io/swift-evolution/

Builder Pattern

我们定义了很多属性的复杂model时,不想这个model的属性在初始化之后被改变,我们就需要通过建造者模式来解决,代码如下:

// OCHMGModelBuilder.h
@interface OCHMGModelBuilder : NSObject@property (nonatomic, nonnull) NSString *one;
@property (nonatomic, nonnull) NSString *two;
@property (nonatomic, nonnull) NSString *three;
@property (nonatomic, nonnull) NSString *four;
@property (nonatomic, nonnull) NSString *five;
@property (nonatomic, nonnull) NSString *six;
@property (nonatomic, nonnull) NSString *seven;
@property (nonatomic, nonnull) NSString *eight;
@property (nonatomic, nonnull) NSString *nine;
@property (nonatomic, nonnull) NSString *ten;@end// OCHMGModelBuilder.m
@implementation OCHMGModelBuilder- (instancetype)init {if (self = [super init]) {_one = @"one";_two = @"two";_three = @"three";_four = @"four";_five = @"five";_six = @"six";_seven = @"seven";_eight = @"eight";_nine = @"nine";_ten = @"ten";}return self;
}@end// OCHMGDemo.h
@interface OCHMGDemo : NSObject@property (nonatomic, readonly, nonnull) NSString *one;
@property (nonatomic, readonly, nonnull) NSString *two;
@property (nonatomic, readonly, nonnull) NSString *three;
@property (nonatomic, readonly, nonnull) NSString *four;
@property (nonatomic, readonly, nonnull) NSString *five;
@property (nonatomic, readonly, nonnull) NSString *six;
@property (nonatomic, readonly, nonnull) NSString *seven;
@property (nonatomic, readonly, nonnull) NSString *eight;
@property (nonatomic, readonly, nonnull) NSString *nine;
@property (nonatomic, readonly, nonnull) NSString *ten;- (instancetype)initWithBuilder:(void(^)(OCHMGModelBuilder *builder))builderBlock;@end// OCHMGDemo.m
@implementation OCHMGDemo- (instancetype)initWithBuilder:(void (^)(OCHMGModelBuilder * _Nonnull))builderBlock {if (self = [super init]) {OCHMGModelBuilder *builder = [[OCHMGModelBuilder alloc] init];if (builderBlock) {builderBlock(builder);}_one = builder.one;_two = builder.two;_three = builder.three;_four = builder.four;_five = builder.five;_six = builder.six;_seven = builder.seven;_eight = builder.eight;_nine = builder.nine;_ten = builder.ten;}return self;
}@end//ViewController.m 中使用
@implementation ViewController
- (void)viewDidLoad {[super viewDidLoad];OCHMGDemo *demo = [[OCHMGDemo alloc] initWithBuilder:^(OCHMGModelBuilder * _Nonnull builder) {builder.two = @"外面修改的Two";}];// demo = one、外面修改的Two、three、four、five、six...ten
}@end

但是Swift的struct支持属性的默认初始值和初始化构造器,使得上方的构造器意义不大,如下:

struct SwiftHMGDemo {var one = "one"var two = "two"var three = "three"var four = "four"var five = "five"var six = "six"var seven = "seven"var eight = "eight"var nine = "nine"var ten = "ten"
}// 使用
func use() {let swiftDemo = SwiftHMGDemo(two: "外面修改的Two")
}// swiftDemo = one、外面修改的Two、three、four、five、six...ten

Facade Pattern

当我们定义了一个方法需要传入的属性,该属性符合多个协议类型的时候,我们就用Facade Pattern来解决。

例如我们有四个协议 JSONDecodableJSONEncodableXMLDecodableXMLEncodable以及一带有两个入参的方法,入参 1 为 json 要求同时满足 JSONDecodableJSONEncodable 两个协议,入参 2 为 xml 同时满足 XMLDecodableXMLEncodable。当我们使用 OC 来解决问题时通常会这么写


@protocol JSONDecodable <NSObject>
@end@protocol JSONEncodable <NSObject>
@end@protocol XMLDecodable <NSObject>
@end@protocol XMLEncodable <NSObject>
@end@protocol JSONCodable <JSONDecodable, JSONEncodable>
@end@protocol XMLCodable <XMLDecodable, XMLEncodable>
@end- (void)decodeJSON:(id<JSONCodable>)json xml:(id<XMLCodable>)xml {}

可以看出,我们是额外定义了两个协议 JSONCodable,XMLCodable来解决的问题,但是在Swift中,我们可以使用&来解决这个问题,不需要定义额外的类型:

protocol JSONDecodable {}
protocol JSONEncodable {}
protocol XMLDecodable {}
protocol XMLEncodable {}func decode(json: JSONDecodable & JSONEncodable, xml: XMLDecodable & XMLEncodable) {}

上方就是介绍了 为什么Swift更具表达式

优势四:代码量大大减少

Swift代码量减少,投入的人力也会减少,整体会提效。

优势五:降低交叉Review成本

由于Android的Kotlin和iOS的Swift语法十分相似,那么在review代码的时候,安卓的和iOS的可以互相review,这样的话能够更加保证代码的质量。那么这种交叉review会给整个团队带来非常大的收益。

参考

https://mp.weixin.qq.com/s?__biz=MzA5MTM1NTc2Ng

https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ

https://apple.github.io/swift-evolution/

https://swiftperformance.com/

https://developer.apple.com/videos/play/wwdc2016/416/

为什么建议iOS开发使用Swift相关推荐

  1. [共享]iOS开发系列--Swift语言

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发系列--Swift语言 概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服 ...

  2. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  3. IOS开发语言Swift入门连载---类型转换

    IOS开发语言Swift入门连载-类型转换 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例. 类型转换在 Swift 中使用is 和 as 操作符实现.这两个操作符提供了一种简单达 ...

  4. ios开发视频 Swift开发视频教程完整版下载

    Swift ios开发视频教程完整版下载(共四季) --下载地址 Swift代码语言教程简介: 在刚刚过去的WWDC2014大会上,苹果公司新发布了一种编程语言Swift.据悉,Swift语言继承了C ...

  5. IOS开发语言Swift入门连载---基础部分

    Swift >是 > iOS > 和 >OS X >应用开发的一门新语言.然而,如果你有 > C > 或者 > Objective-C > 开发经 ...

  6. IOS开发【Swift编程语言】

    初识 学习mac电脑的使用 下载app appstore: 通过网页下载(安装只需要将软件图标拖动到资料夹). 移除app Finder->应用程式[拖动到右下角的垃圾桶即可] 滑鼠.触控板 滑 ...

  7. 【iOS开发】swift 3.0 延长设置launch image启动页面图片显示时间

    在ViewController.swift里面的viewDidLoad方法中添加代码(3.0为秒数,可自定义): override func viewDidLoad() {super.viewDidL ...

  8. iOS开发(swift):UI界面

    # swift bounds和frame区别 # 参考资料:https://blog.csdn.net/chenyufeng1991/article/details/51764303 -- frame ...

  9. IOS开发语言Swift入门连载---基本运算符

    运算符是检查.改变.合并值的特殊符号或短语.例如,加号+ 将两个数相加(如let i = 1 + 2 ).复杂些的运算例如逻辑与运算符&& (如if enteredDoorCode & ...

最新文章

  1. Oracle Golden Gate体系架构详解(原创) - CzmMiao的博客生活 - ITeye技术网站
  2. 腾讯发布AR导航,“生态+技术”驱动下一代智能座舱体验跃迁
  3. 210328卡式水分开阶段总结
  4. Why Vector Clock are Easy or Hard?
  5. 如何解决secureCRT里面的The remote system refused the connection.
  6. jquery插件dataTables自增序号。
  7. innobackupex备份工具
  8. golang解析IP到城市jsonRPC服务教程
  9. 自动化测试之Appium模拟机测试
  10. 中山大学计算机线性代数第六版答案,中山大学2013线性代数第二次作业
  11. 消息: Automation 服务器不能创建对象
  12. 生物信息学常用的在线网站及数据库汇总
  13. 【CSDN软件工程师能力认证学习精选】十分详细的React入门实例
  14. 快收下这枚 Scrapy Requests 口味的爬虫“回魂丹”
  15. 分治法--处理数列问题
  16. 手机刷机是什么意思?快速了解手机刷机基本概念
  17. 区分阿里云系统盘和数据盘
  18. originPro将坐标以百分比的方式显示
  19. 洛谷 1498 南蛮图腾
  20. Mondrian + JPivot环境配置和演示

热门文章

  1. Oracle 使用xtts升级11g-to-19c
  2. 用计算机弹出音乐谱,计算器弹歌曲谱子
  3. 华为OD机试真题2023(JAVA)
  4. 小程序中商家入驻提醒、新订单提醒
  5. 有效学习的6个方法学习方法
  6. Datawhale数据分析学习——学术前沿趋势分析 任务1
  7. 基因组dna,sm,rm序列类型说明
  8. matlab系统辨识工具箱原理,matlab常用工具箱介绍
  9. 基于神经网络的文字识别,神经网络如何识别图像
  10. 【camera】【摄像头模组】摄像头模组简单介绍