美文网首页Swift
Swift:函数、枚举与可选项

Swift:函数、枚举与可选项

作者: 码小菜 | 来源:发表于2021-06-16 19:28 被阅读0次

    目录
    一,基础语法
    二,流程控制
    三,函数
    四,枚举
    五,枚举的内存布局
    六,可选项

    一,基础语法

    1,常量和变量
    • let定义常量,用var定义变量
    • 常量只能赋值一次,变量可以赋值多次
    • 不能使用未初始化的常量和变量
    • 在定义常量和变量时,如果有初始化就不需要声明类型,否则就需要声明
    2,常见数据类型
    • 在32位平台,Int等价于Int32;在64位平台,Int等价于Int64
    • Float的精度只有6位,Double的精度至少15位
    3,元组
    • 元素个数必须大于1个
    • 有元素名称就用名称访问,否则就用下标访问
    • _”表示忽略该参数
    4,typealias

    二,流程控制

    1,if-else
    2,while
    • repeat-while相当于C语言中的do-while
    • Swift3开始,去除了自增(++)、自减(--)运算符
    3,for
    • 闭区间运算符
    • 半开区间运算符
    • 单侧区间运算符
    • 间隔区间值
    • where
    • outer
    4,switch
    • 基本使用

    1>默认可以不写break,不会贯穿到后面的条件
    2>使用fallthrough可以实现贯穿的效果
    3>如果已经处理所有的情况,可以不写default

    • 复合条件
    • 元组匹配
    • 区间匹配
    • 值绑定
    • where

    三,函数

    1,基本使用
    2,参数使用
    • 参数标签
    • 默认参数值
    • 可变参数
    • 输入输出参数

    1>用inout定义一个输入输出参数,可以在函数内部修改外部实参的值
    2>可变参数不能标记为inout
    3>inout参数不能有默认值
    4>inout参数不能传入常量
    5>inout参数的本质是地址传递

    3,函数重载
    • 函数名相同
    • 参数个数不同或者参数类型不同或者参数标签不同
    • 返回值与函数重载无关
    4,内联函数
    • 将函数调用展开成函数体
    • XcodeRelease模式下默认会开启编译器优化,编译器会自动将某些函数变成内联函数
    • 不会被自动内联的函数:函数体比较长、包含递归调用、包含动态派发
    • 由于编译器会自动优化,所以我们没必要使用@inline
    5,函数类型
    • 类型格式
    • 作为参数
    • 作为返回值
    6,嵌套函数
    7,文档注释

    四,枚举

    1,基本使用
    2,原始值
    • 显式原始值
    • 隐式原始值
    3,关联值
    4,递归枚举
    5,定义方法

    五,枚举的内存布局

    查看内存的工具

    1,MemoryLayout
    • stride:分配的内存大小
    • size:使用的内存大小
    • alignment:内存对齐参数
    2,无原始值无关联值
    • 每个case都有一个序号(从0开始),序号也称为成员值
    • 成员值存储在枚举变量中,在结合switch使用时,需要区分枚举变量属于哪一个case
    • 由于枚举变量只存储成员值,所以分配1个字节就足够了
    3,有原始值
    • 原始值是固定的,也是所有枚举变量公共的,所以它不存储在枚举变量中
    • 由于枚举变量还是只存储成员值,所以也只分配1个字节
    4,有关联值
    • 关联值是动态的,也是每个枚举变量独有的,所以它存储在枚举变量中
    • 枚举变量的内存等于关联值和成员值的内存之和,而关联值取case中占用内存最大的一个
    • 25(使用的内存)= 3 * 8(关联值)+ 1(成员值),由于内存对齐,所以分配了32个字节
    5,一个case
    • 只有一个case,在结合switch使用时无需区分,所以枚举变量不用存储成员值
    • 由于枚举变量不用存储任何数据,所以它不占用内存空间

    六,可选项

    1,基本介绍
    • 可选项允许将值设置为nil
    • 可选项是对其他类型的一层包装,可以将它理解为一个盒子
    • 如果不为nil,里面装的是其他类型的数据;如果为nil,它就是一个空盒子
    2,强制解包
    • 强制解包就是从盒子中取出数据
    • 不能对值为nil的可选项进行强制解包
    3,隐式解包
    4,可选项绑定
    • 可选项绑定用来判断可选项是否为nil
    • 如果不为nil就返回true并自动解包,否则就返回false
    5,guard
    • 与可选项绑定结合使用
    • 如果可选项不为nil就自动解包并跳过大括号,否则就执行大括号里面的代码
    6,空合并运算符
    • a ?? ba必须是可选项,b可以不是
    • ab的类型必须相同
    • 如果a不为nil就返回a,否则返回b
    • 如果b不是可选项,返回a时会自动解包
    7,多重可选项
    • 有值的情况
    • 无值的情况

    相关文章

      网友评论

        本文标题:Swift:函数、枚举与可选项

        本文链接:https://www.haomeiwen.com/subject/nuwdeltx.html