万字长文详解如何使用 Swift 提高代码质量.pdfVIP

万字长文详解如何使用 Swift 提高代码质量.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

万字长文详解如何使用Swift提高代码质量

一、前言

京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发。之后一年多我

们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%+以上的业务。通过使用

Swift提高了团队内同学的开发效率,同时也带来了质量的提升,目前来自Swift的Crash的占比

不到1%。在这过程中不断的学习/实践,团队内的CodeReview,也对如何使用Swift来提高代

码质量有更深的理解。

二、Swift特性

在讨论如何使用Swift提高代码质量之前,我们先来看看Swift本身相比ObjC或其他编程语言有

什么优势。Swift有三个重要的特性分别是富有表现力/安全性/快速,接下来我们分别从这三个

特性简单介绍一下:

富有表现力

Swift提供更多的编程范式和特性支持,可以编写更少的代码,而且易于阅读和维护。

基础类型-元组、Enum关联类型

方法-方法重载

protocol-不限制只支持class、协议默认实现、类专属协议

泛型-protocol关联类型、where实现类型约束、泛型扩展

可选值-可选值申明、可选链、隐式可选值

属性-let、lazy、计算属性`、willset/didset、PropertyWrappers

函数式编程-集合filter/map/reduce方法,提供更多标准库方法

并发-async/await、actor

标准库框架-Combine响应式框架、SwiftUI申明式UI框架、CodableJSON模型转换

Resultbuilder-描述实现DSL的能力

动态性-dynamicCallable、dynamicMemberLookup

其他-扩展、subscript、操作符重写、嵌套类型、区间

SwiftPackageManager-基于Swift的包管理工具,可以直接用Xcode进行管理更方便

struct-初始化方法自动补齐

类型推断-通过编译器强大的类型推断编写代码时可以减少很多类型申明

提示:类型推断同时也会增加一定的编译耗时,不过Swift团队也在不断的改善编译速度。

安全性

代码安全

let属性-使用let申明常量避免被修改。

值类型-值类型可以避免在方法调用等参数传递过程中状态被修改。

访问控制-通过public和final限制模块外使用class不能被继承和重写。

强制异常处理-方法需要抛出异常时,需要申明为throw方法。当调用可能会throw异常的方

法,需要强制捕获异常避免将异常暴露到上层。

模式匹配-通过模式匹配检测switch中未处理的case。

类型安全

强制类型转换-禁止隐式类型转换避免转换中带来的异常问题。同时类型转换不会带来额外

的运行时消耗。

提示:编写ObjC代码时,我们通常会在编码时添加类型检查避免运行时崩溃导致Crash。

KeyPath-KeyPath相比使用字符串可以提供属性名和类型信息,可以利用编译器检查。

泛型-提供泛型和协议关联类型,可以编写出类型安全的代码。相比Any可以更多利用编译

时检查发现类型问题。

Enum关联类型-通过给特定枚举指定类型避免使用Any。

内存安全

空安全-通过标识可选值避免空指针带来的异常问题

ARC-使用自动内存管理避免手动管理内存带来的各种内存问题

强制初始化-变量使用前必须初始化

内存独占访问-通过编译器检查发现潜在的内存冲突问题

线程安全

值类型-更多使用值类型减少在多线程中遇到的数据竞争问题

async/await-提供asy

文档评论(0)

137****9859 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档