一、基础部分
1.类型别名
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
2.if条件语句
swift中,if条件语句里面必须是boolen类型的值,和oc不同
3.元组(tuples)
元组里面类型任意,并不要求相同的类型
let http404Error : (Int, String) = (404, "Not Found")
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
print("The status message is \(statusMessage)")
如果一只需要一部分元组的值,分解的时候可以把要忽略的部分用下划线_标记
let (justTheStatusCode,"下划线") = http404Error
元组可以通过下标来访问
print("The status code is \(http404Error.0)")
元组可以给元素明明,并且通过命名取值
let http200Status = (statusCode : 200, description: "OK")
print("The status code is \(http200Status.statusCode)")
4.可选类型
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
//这里转换类型所得到的convertedNumber是一个可选类型的值,
print(convertedNumber!)
//nil
var serverResponseCode : Int? = 404
serverResponseCode = nil
//注意: nil不能用于非可选的常量和变量,如果代码中有常量或者变量需要处理值缺失的情况,请把它们声明称对应的可选类型.
if 语句以及强制解析
if convertedNumber != nil {
print("convertedNumber contains some integer value.")
}
//如果你确定一个可选类型确实包含值之后,可以在其后面加 ! ,表示强制解包,强制解包是非常危险
if convertedNumber != nil {
print("convertedNumber contains value \(convertedNumber!)")
}
5.可选绑定
if let convertedNumber = convertedNumber {
print("可选绑定\(convertedNumber)")
}
//打印结果 可选绑定123
```
6.包含多个可选绑定或者多个布尔条件在一个if语句中,用逗号分开。只要有人一个可选绑定的值为nil,或者任意一个布尔条件为false,则整个if条件判断为false,这时你就需要使用嵌套if条件语句来处理。
```
if let firstNumber = Int("0"), let secondNumber = Int("52"),firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
//打印结果 0 < 52 < 100
```
7.隐式解析可选类型
```
let possibleString: String? = "An optional string."
let forcedString: String = possibleString!//需要感叹号来取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString//不需要感叹号
```
使用隐式解析可选类型后,仍然可以把隐式解析可选类型当作普通可选类型来判断它是否含值
```
if assumedString != {
print(assumedString)
}
```
也可以再可选绑定中使用隐式解析可选类型来检查并解析他的值
```
if let definiteString = assumedString {
print(definiteString)
}
```
8.错误处理
```
func canThrowAnError() throws {
//这个函数有可能抛出错误
}
do {
try canThrowAnError()
//没有错误消息抛出
} catch {
//有一个错误消息抛出
}
```
二、基本运算符
1.swift有恒等===和不恒等!== 用来判断两个对象是否引用同一个对象实例(两个累需要遵守一个协议)
2.比较元组大小会按照从左到右,逐值比较的方式,直到发现有两个值不等时停止。如果所有的值都相等,那么这一对元组我们就称他们是相等的(swift标准库中只能比较一个以内元素的元组比较函数)
3.空合运算符( a ?? b) a 表示可选类型,b表示当可选类型没有值时,默认使用的值
4.区间运算符 闭区间 1...5表示1、2、3、4、5 ,1..<5表示1、2、3、4
三、字符串和字符
1.判断字符串是否为空
```
var emptyString = ""
var anotherEmptyString = String()
if emptyString.isEmpty {
print("Nothing to see here")
}
if anotherEmptyString.isEmpty {
print("Nothing to see here1")
}
```
2.字符串是值类型,如果你创建了一个新的字符串,那么当其进行常量,变量赋值操作,或者再函数方法中传递时,会进行值拷贝。再任何情况下,都会对已有的字符串值创建新副本,并对新副本进行传递或赋值操作。
3.使用字符
```
for character in "Dog!".character {
print(character)
}
```
4.字符串可以通过传递一个值类型为Character的数组作为自变量来初始化
```
let catCharacters: [Character] = ["a", "b"]
let cat = String(catCharacters)
print(cat)
```
打印结果为"ab"
5.字符串的索引
```
let greeting = "Guten Tag"
print(greeting[greeting.startIndex])
print(greeting[greeting.index(after: greeting.startIndex)])
print(greeting[greeting.index(greeting.startIndex, offsetBy: 7)])
```
打印结果为G,u,a
6.indices属性
使用chaaracters属性的indices属性会创建一个包含全部索引的范围(Range)
```
for index in greeting.characters.indices {
print("\(greeting[index])")
}
```
打印结果为G、u、t、e、n、T、a、g
四、集合
1.数组
创建一个带有默认值的数组
```
var threeDoubles = Array(repeating: 1.1, count: 3)
print(threeDoubles)
//打印结果为 [1, 1, 1]
```
2.数组可以相加
```
var twoDoubles = Array(repeating: 3, count: 2)
print(threeDoubles + twoDoubles)
//打印结果为[1, 1, 1, 3, 3]
```