1.常量
let maxNum = 10 //单个常量赋值
let maxNum = 10, minNum = 2 //多个常量赋值用逗号隔开
2.变量
var x = 0.0 //单个变量赋值
var x = 0.0, y = 0.1 //多个变量赋值用逗号隔开
3.类型注解
系统可通过赋初始值进行自动推断。
var name: String //冒号(:)加空格( )
name = "Hello" //先注解再赋值
var name, address: String //多个变量注解
let one: Int = 1 //同时注解和赋值
4.输出
print(name) //输出一个变量/常量
print("welcome the \(address)") //输出一串字符加变量,使用转义字符"\"与括号、变量名表示该变量
5.注释
//这是一条注释
/* 这也是
一条注释 */
/* 这是一个篮子
/* 这是篮子里的苹果 */
这样方便将有注释的代码注释掉 */
6.分号
平时可加可不加,同一行中有两句话必须加。
let cat = "🐱"; print(cat)
7.整数
Int UInt(最好不用)
8.浮点数
|--------|-----|--------------|-------|
| Double | 64位 | 很大/高精度情况下使用 | 15位小数 |
| Float | 32位 | 对精度要求不高的情况下用 | 6位小数 |
9.Swift语言自带类型安全与类型推断,根据赋值类型推断变量/常量字符类型。
10.字符型字面量
|------|------|---------|
| 十进制数 | | 17 |
| 二进制 | 0b前缀 | 0b10001 |
| 八进制 | 0o前缀 | 0o21 |
| 十六进制 | 0x前缀 | 0x11 |
11.强制转换
let Pi = Double(three) + 0.1415926
let iPi = Int(Pi) //截断小数,3.14159会变成3
12.类型别名
typealias Audio = UInt16
//typealias:类型别名关键字;Audio:别名;UInt16:原名
13.布尔值(Bool)
let a = true
let b = false
14.元组(tuples)
let http404Error = (404,"Not Found") //这是一个(Int,String)元组
//元组定义
let (Code,Message) = http404Error
//元组分解
print("status is \(Code)")
print("status is \(Message)")
//当只需要这个元组的一部分时,元组半分解
let (Code,_) = http404Error
print("status is \(Code)
//下标分解
print("status is \(http404Error.0)")
//命名分解
let http404Error = (Code: 404, Message: "Not Found")
print("status is \(http404Error.Code)")
15.可选类型(optionals)
let a = "123"
let b = Int(a) //b是一个可选类型的Int(Int?)
16.nil
类似于java中的null,是一个值,表示值缺失。
17.可选绑定
if var a = Int(b){ //Int(b)为nil或赋值false,if判断为false
print("true")
}
18.隐式解析可选类型
|-------------|----------------------------------------------------------------------------|---|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|
| 可选类型 | option | ? | 可能有值,也可能无值 | Int? |
| 强制解析 | | ! | 如果确定有值则解析值。如果没有值(nil),则强制解析会崩溃 | a! |
| 可选绑定 | 判断是否有值 | | if let a = b{ print("√") }else{ peint("×") } | |
| 自动解析 (隐式解析) | 声明变量时就用"!",使用时会自动解析值,而不需要加"!" 如果它之后可能会成为nil时不要使用隐式解析可选类型!当解析nil时程序会崩溃。 | | //未使用隐式解析时 var dog: String? = "旺财" let cat: String = dog! let fish: String = dog! let monkey: String = dog! //使用隐式解析时 var dog: String! = "旺财" let cat: String = dog let fish: String = dog let monkey: String = dog | |
19.错误处理
可推断运行失败原因,并传播出去
//1.抛出
func AnError() throws{
//可能有错的函数
}
//2.可能有一个错并打印问题
do{
try AnError()
//没有错时运行的函数
}catch{
//有错时抛出的内容
}
//3.可能有两个错并打印问题
do{
try TwoErrors()
//没有错时运行的函数
success()
}catch ErrorsMessage.oneError{
//出现第一个错时抛出的内容
OneReeor()
}catch ErrorsMessage.twoReeor{
//出现第二个错时抛出的内容
TwoError()
}
20.断言和先决条件
断言和先决条件指在编码时赋予一个必要条件或期望,运行时如果这个条件为true则继续运行,如果为false则终止运行。
断言帮助找到错误假设,仅在调试环境中止。先决条件帮助找到存在的问题,在调试环境和生产环境出问题都会被中止。
21.断言调试
let age = -3
assert(age >= 0, "年龄不能小于0")
assert(条件,"提示")
assert(条件)
断言失败:用于检查条件判断是否完全。
if age > 10{
print("年龄>10")
}else if age > 0 {
print("0<年龄<10")
}else{
assertionFailure("有个条件还没判断")
}
22.强制执行先决条件
一个条件可能为假,但后续运行必须为真。
precondition(index>0,"下标必须大于0")
unchecked模式不执行先决条件。
23.fatalError(_:file:line:)
用于没实现的方法,不会被优化掉,运行到此时程序被中断。