问题一:对 Swift 中的泛型(Generic)是怎么理解的?它解决了什么问题?
答:泛型可以支持你编写适用于多种类型的函数或者类型。比如系统的 Array、DIctionary 都是通过泛型来支持多种类型。
解决问题:减少重复代码,试想若没有泛型,参数是 Int 类型,写一个 Int 类型的交换方法,参数是 String 类型,则又得写一个 String 类型的交换方法,而两个方法除了类型不同其他都是相同的。
问题二:可选类型(Optional)的底层实现是什么?它解决了什么问题?
答:可选类型的底层是通过枚举而来实现的。
它解决了如何表示变量值缺失的问题。在 Objective-C 中只有对象类型值才能为空,而在 Swift 中基本类型也是可以设置为可选类型的。当你声明的变量值可能为空时,你就需要把它声明为可选类型。这样,在你访问该变量的时候就不会忘记它的值可能为空(使用时要进行安全解包),从而减少代码的出错率。
问题三:nil 和 .none 的是什么关系?
答:它俩是等价的,通过下方代码也可以验证得出。推荐使用 nil 来代表空。
问题四:参见下面的代码,它的打印结果是什么?为什么?
答:打印结果为:I love apple。因为 closure 在声明的时候,捕获列表就已经捕获了 fruit 的值(值拷贝),后面再修改 fruit 的值是不会影响 closure 的打印。若将捕获列表去掉就会影响了(这样它调用的时候才会捕获 fruit 的值)。
问题五:guard-let 和 if-let 的区别?
答:它俩都是用来安全解包的。但 guard-let 必须有 else 分支来处理条件为 false 的情况,而 if-let 则不需要。且 guard-let 声明的变量的作用域是当前代码块,而if-let则只在它内部。
一般在判断先决条件的时候使用 guard-let,即当前条件不成立后续代码则无需执行(比如用户名不能为空等等)。
本次分享到这里就结束了,本次的五个问题你是否都流畅的答出来了呢?欢迎评论区留言。如果本文对你有所帮助的话,欢迎转发呦。拜拜!
本账号会持续更新 iOS 开发相关的知识,欢迎大家关注。