编译&架构

image.png
image.png image.png
image.png

文档注释

可参考:https://swift.org/documentation/api-design-guidelines/

  1. /// 求和 【概述】
  2. ///
  3. /// 将两个整数相加 【详细的描述】
  4. ///
  5. /// - Parameter v1: 整数1
  6. /// - Parameter v2: 整数2
  7. ///
  8. /// - Note: 传入两个整数即可 【批注】
  9. ///
  10. func sum(v1:Int,v2:Int) -> Int {
  11. return v1 + v2
  12. }

image.png

常见数据类型

image.png

新增:Tuple元祖

let httpStatus = (statusCode:200,result:”正常”)
let httpError = (404,”Not Found”)

流程控制

闭区间运算符

  1. **for** i **in** 0...3{<br /> print(i)<br /> }_//1 2 3_

半开区间

  1. **for** i **in** 0..<3{<br /> print(i)<br /> }_// 1 2_<br /> **let** range = "a"..."g"<br /> range.contains("g") _//true_<br /> **let** range2 = "a"..<"g"<br /> range2.contains("g") _//false_

囊括所有可能要用到的ASCII字符

  1. **let** allCharacter : ClosedRange<Character> = "\0"..."~"

间隔区间

for t in stride(from: 1, to: 5, by: 2){
print(t)
} //1 3
for t in stride(from: 1, through: 5, by: 2){
print(t)
} //1 3 5

Switch

1.区间匹配

  1. let score = 88
  2. switch score {
  3. case 0..<60:
  4. print("不及格")
  5. case 60..<80:
  6. print("一般般")
  7. case 80..<90:
  8. print("优秀")
  9. case 90...100:
  10. print("无得弹")
  11. default:
  12. print("作弊")
  13. } //优秀

2.元祖匹配

  1. let tt = (10,"ok")
  2. switch tt {
  3. case (3,"ok"):
  4. print("第一项")
  5. case (1..<10,_):
  6. print("第二项")
  7. case (let a,"ko")where a>5:
  8. print("第三项\(b)")
  9. case (5...10,let b):
  10. print("第四项\(b)")
  11. default:
  12. print("其他")
  13. }//第四项ok

注意事项:

  • case、default 后面不能写大括号{}
  • 默认不用写 break,不会贯穿到后面条件
  • 想贯穿可以使用 fallthrough
  • switch 必须要保证涵盖所有情况, 可以不使用default
  • case、default 后面至少要有一条语句,如果没有请添加 break
  • 可以使用下划线 _ 来忽略某个值,也可以值绑定到一个变量或常量

Where

条件判断,使用得妙可以简化很多代码

可变的参数

  1. func arrSum (objs numbers: Int...)->Int{
  2. var temp = 0
  3. for obj in numbers {
  4. temp += obj
  5. }
  6. return temp
  7. }
  8. arrSum(objs: 10,20,30) //60
  • 一个函数最多只有一个可变参数
  • 紧跟后面的参数不能省略参数标签

    输入输出参数 inout

  • 可变参数不能标记inout

  • inout 参数不能有默认值
  • 本质为地址传递(引用传递)

内联函数 Inline Function

image.png

image.png

typealias 给类型起别名

  1. typealias newName = Int32
  2. typealias Date = (year:Int,month:Int,day:Int)

Void其实就是空元祖

  1. public typealias Void = ()

枚举Enum

image.png

关联值Associated Values

image.png

原始值Raw values

image.png

  • 原始值不占用枚举变量的内存

可选项optional

  • 可选项,又叫可选类型,它允许将值设置为nil
  • 在类型名称后面加 ? 来定义可选项
  • 不能对值为 nil 的可选项(空盒子) 强制解包

var obj : Int? //默认nil
_image.png

可选项绑定

image.png

空合并运算符 ??

image.png
image.png
image.png

  1. // a 不为nil ,a的问号数少于b,直接用b的问号数
  2. // a 不为nil ,a的问号数多于b,直接用a的问号数-1
  3. // a 不为nil ,a的问号数等于b,直接用任意一方的问号数
  4. // a 为nil ,a的问号数多于或等于b,直接用b的问号数
  5. // a 为nil ,a的问号数少于b,直接用b的问号数-a的问号数,包nil

多重可选项

image.pngimage.png
image.png

结构体struct &类class

自动初始化
image.png 等同于 image.png

  • 结构差不多,但初始化有很大区别,编译器并没有为 类 自动生成可以传入成员值的初始化器

image.pngimage.png

  • 结构体是值类型(枚举也是),类是引用类型(指针类型)

image.png

赋值拷贝

image.png
image.png

枚举,结构体,类都可以定义方法

  • 方法不占用对象内存空间
  • 方法的本质是函数,方法与函数都是存放在代码段