el-table-column都可以写什么值_Swift 已经脱离小白?看看这里的五道题都能答下来吗?...

这篇博客主要讨论了 Swift 中的泛型、可选类型的概念及其底层实现,同时讲解了 nil 与 .none 的关系,并通过示例解释了闭包捕获变量的值拷贝行为。最后,对比了 guard-let 与 if-let 的使用区别。通过这五个问题,帮助读者深入理解 Swift 的核心特性。
摘要由CSDN通过智能技术生成

问题一:对 Swift 中的泛型(Generic)是怎么理解的?它解决了什么问题?

答:泛型可以支持你编写适用于多种类型的函数或者类型。比如系统的 Array、DIctionary 都是通过泛型来支持多种类型。

b84d7a5d4de5175ab8dd9024f6420838.png

Array 通过泛型支持多种类型

解决问题:减少重复代码,试想若没有泛型,参数是 Int 类型,写一个 Int 类型的交换方法,参数是 String 类型,则又得写一个 String 类型的交换方法,而两个方法除了类型不同其他都是相同的。

9203dedf1f91e806c92499308a02dee1.png

通过将参数定义为泛型,来减少重复代码

问题二:可选类型(Optional)的底层实现是什么?它解决了什么问题?

答:可选类型的底层是通过枚举而来实现的。

f602e17d1aab09a0d8e51efce13121b2.png

简化版的 Optional 底层实现

它解决了如何表示变量值缺失的问题。在 Objective-C 中只有对象类型值才能为空,而在 Swift 中基本类型也是可以设置为可选类型的。当你声明的变量值可能为空时,你就需要把它声明为可选类型。这样,在你访问该变量的时候就不会忘记它的值可能为空(使用时要进行安全解包),从而减少代码的出错率。

问题三:nil 和 .none 的是什么关系?

答:它俩是等价的,通过下方代码也可以验证得出。推荐使用 nil 来代表空

49163ee67ae6a45e8b17a237efd8d96e.png

验证 nil 和 .none 是否等价

问题四:参见下面的代码,它的打印结果是什么?为什么?

761f55dc9cc974a9812f3efa149b23de.png

代码打印结果

答:打印结果为:I love apple。因为 closure 在声明的时候,捕获列表就已经捕获了 fruit 的值(值拷贝),后面再修改 fruit 的值是不会影响 closure 的打印。若将捕获列表去掉就会影响了(这样它调用的时候才会捕获 fruit 的值)。

21d2cb8c011caca789018336991a8585.png

打印结果为:I love banana

问题五:guard-let 和 if-let 的区别?

答:它俩都是用来安全解包的。但 guard-let 必须有 else 分支来处理条件为 false 的情况,而 if-let 则不需要。且 guard-let 声明的变量的作用域是当前代码块,而if-let则只在它内部。

一般在判断先决条件的时候使用 guard-let,即当前条件不成立后续代码则无需执行(比如用户名不能为空等等)。

5107b5091ee88bf74cfa6e3bb6b45c88.png

guard-let 和 if-let 的区别

本次分享到这里就结束了,本次的五个问题你是否都流畅的答出来了呢?欢迎评论区留言。如果本文对你有所帮助的话,欢迎转发呦。拜拜!

本账号会持续更新 iOS 开发相关的知识,欢迎大家关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值