Swift 基础

1.值类型和引用类型的区别? Array, String, Dictionary在Swift中属于什么类型? 是如何处理的?

值类型和引用类型最基本的分别在赋值之后的结果。当一个值类型被赋值的时候,相当于创造了一个完全独立的实例,这个实例保有属于自己的独有数据,数据不会受到其他实例的数据变化影响

在Swift里面,数组(Array)、字符串(String)、字典(Dictionary)都属于值类型

Array, String, Dictionary在每次使用的时候都会被复制一份

2.Swift中有哪些高阶函数? 有几种map函数? 有什么不同?

map, filter, reduce

map: 数组中每个元素通过某种规则(闭包实现) 进行转换,最后返回一个新的数组

flatMap: 能把数组中存有数组的数组(二维数组、N维数组)一同打开变成一个新的数组,称为降维,通俗一点就是把多维数组都会拍扁为一维数组

compactMap 和flatMap类似,不过compactMap会将nil剔除,并对Optional进行解包

filter用来过滤元素,即筛选出数组元素中满足某种条件(闭包实现) 的元素

reduce两个函数都是把数组元素组合计算为另一个值,并且会接受一个初始值,这个初始值的类型可以和数组元素类型不同

3. guard和defer使用场景

defer语句在代码块(方法、闭包等,可以理解为大括号包装起来的代码)作用域退出之前执行,也就是代码块中其他应该执行的代码都执行完了,才执行defer中的代码

一个代码块允许多个defer,多个defer执行的顺序从后到前

defer使用场景:
1. 代码块执行完之后,清理资源

2.try catch 结构, 无论是否抛出错误, 都可以执行到defer

guard使用场景:
1. 当一些先决条件不满足,后续代码没必要执行的情况下,就应该去使用 guard。比如,在 登录页面。先决条件就是用户必须填写用户名和密码。如果这两项任意一项为空,那后面的登录逻辑是没必要再去执行的。

当一些业务代码,在不满足某些条件的情况下,也需要执行的时候,就要用的if了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、元祖(Tuple) 把多个值合并成单一的复合型的值。特点:1、元祖中的值可以是任何类型,且不必是同一类型。2、...
    Abner_XuanYuan阅读 1,505评论 0 0
  • 可空链式调用 可空链式调用是一种可以请求和调用属性、方法以及下标的过程,它的可空性体现于请求或调用的目标当前可能为...
    cht005288阅读 302评论 0 0
  • 可选的链接 可选链接是查询和调用属性、方法和下标的过程,这些可选对象目前可能为nil。如果可选项包含一个值,则...
    彬至睢阳阅读 253评论 0 0
  • 错误处理 使用任何采用Error协议的类型表示错误。 使用throw来抛出一个错误,使用throws来标记函数可以...
    豆瓣菜阅读 286评论 0 3
  • 变量和常量 在Swift中,有两种方法可以存储数据:变量和常量。变量是可以随时更改其值的数据存储,而常量是可以设置...
    Augs阅读 611评论 0 3