【草稿】Swift 指南学习笔记

20181225

正在学习 Swift 中,简要的笔记~

封面图来源

中文翻译 Swift 指南(需要科学上网)
官方文档 Swift Language Guide
推荐使用的划词翻译 Chrome 插件:翻译侠
如果官方版本有问题,请暂时使用这个 替代版本

基础内容

数据类型

  • Int 整数
  • Double 浮点数 精度15位(不推荐 Float,精度6位)
  • Bool 布尔值
  • Tuples 元组, Tuples 不可以直接使用,语法例如(Int, String)
  • nil 表示没有值
  • Optional 可选类型,在类型后加上 ?表示。例如Int?,表示值可能为 nil,或者 Int 类型
  • Array 数组

TODO: 获取判断数据类型 type(of: date)

数据类型转换

所有转换都使用数据类型的函数来转换,即全部都为显式转换
例如字符串 Int(“32”)

变量声明

var 声明变量
let 声明常量

声明变量时必须指定默认值。var foo: Int = 1
没有默认值时,也可以指定为可选类型。var foo: Int?
赋值的情况下类型指定可以省略,系统会自动推断,按住 option 键点击变量,即可看到类型推断的结果

调试输出

print(foo, bar)

if 语句及强制展开

给可选类型赋值时,得到的值仍然是可选类型
例如声明 var foo: Int? = 1, foo 的值为 Optional(1)

使用可选类型内部的值有以下几种方式

  1. 确认变量有值时,使用 ! 强制展开(Forced Unwrapping)

    1
    2
    3
    if foo != nil {
    foo!
    }
  2. 使用 if 语句自带的语法,进行可选项绑定(Optional Binding)
    即如果 foo 内部的值不为 nil 时,它的内部的值会赋给 bar
    变量 bar 只能在当前的 if 代码块内使用

    1
    2
    3
    if let bar = foo {
    bar
    }
  3. 隐式展开可选项 Implicitly Unwrapped Optionals
    ! 放在类型声明后了,语法更简洁,bar 值是 foo 变量内部的值 或者 nil

    1
    let bar: Int! = foo
  4. 利用 合并空值运算符 Nil-Coalescing Operator
    如果 foo 内部有值,则返回内部值。如果 foo 内部值为 nil,则返回 ?? 后的默认值
    默认值的类型必须与 foo 内置值类型相同

    1
    foo ?? nil

基本运算符

算术运算符 + - * / % += -=

一元减号运算符 Unary Plus Operator,可以取到负值

1
2
3
4
var foo = 3
-foo // -3
foo = -3
-foo // 3

合并空值运算符 Nil-Coalescing Operator

1
a ?? b

如果可选项 a 有值则展开,如果没有值,是 nil ,则返回默认值 b 。表达式 a 必须是一个可选类型。表达式 b 必须与 a 的储存类型相同。

区间运算符 Range Operators

闭区间 ClosedRange 例如 1...5 1,2,3,4,5
半开区间 Range 例如 0..<5 0,1,2,3,4

字符串

isEmpty 判断是否为空
字符串插值

1
2
3
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message is "3 times 2.5 is 7.5"

集合类型

CollectionTypes_intro_2x
数组 Array
集合 Set
字典 Dictionary

某个集合类型声明后,它内部所有值都是相同的类型

数组

Array 或 [Element], 启动 Element 是内部元素的类型

声明数组

1
2
3
4
var a = Array<Int>() // 空数组 []
var b = [Int]() // 空数组 []
var c = Array(repeating: 0.0, count: 3) // [0.0, 0.0, 0.0]
var shoppingList: [String] = ["Eggs", "Milk"]

数组方法

1
2
3
4
5
isEmpty
count
append(_:)
remove(at:)
insert(_:at:)

修改某个范围的值
shoppingList[4...6] = ["Bananas", "Apples"]

遍历数组

1
2
3
4
5
6
7
8
9
10
11
12
13
for value in shoppingList {
print(value)
}

for index in 0..<shoppingList.count {
let value = shoppingList[index]
print("index: \(index), value: \(value)")
}

// enumerated 方法返回元组
for (index, value) in shoppingList.enumerated() {
print("index: \(index), value: \(value)")
}

合集

合集将不重复的值,无序存放
Set

1
var num: Set<Int> = [2, 1, 3]

合集方法

1
2
3
4
5
isEmpty
contains(_:)
insert(_:)
remove(_:)
removeAll()

遍历合集
合集是无序的,遍历前使用 sorted 可以排序

1
2
3
4
5
6
7
for value in num.sorted() {
print(value) // 1,2,3
}

for value in num.sorted(by: >) {
print(value) // 3,2,1
}

合集操作
setVennDiagram_2x-1
intersection、symmetricDifference、union、subtracting

夏味 wechat
欢迎添加我个人微信,互相学习交流