- 如果你的代码中有不需要改变的值,请使用 let 关键字将它声明为常量。只将需要改变的值声明为变量var。
- 在变量名后边加上冒号和空格来添加类型标注
var red, green, blue: Double
- 如果要在一行内执行多条语句要写分号分隔符
let cat = "🐱"; print(cat)
// 输出 "🐱
- 不想打印换行符
let cat = "🐱"; print(cat, terminator: " --- ")
print("test")
-
Int和UInt优先使用Int,可以避免类型转换。即使知道要存储的值是非负数也应该用Int类型。
也就是说应该用Int不用UInt,来保持通用型,和避免类型转换。 -
Double和Float类型,优先使用Double,Double是swift默认的小数类型,精度更高. 也就是说使用Double不用Float,类保持代码统一性,避免类型转换.
-
数值类字面量可以包含0或者_来表示,增强可读性
-
字面量数值可以直接相加,但是变量要类型一致才可以相加
//字面量可以直接相加
var a = 3.14 + 2;
//不同类型变量不能相加
var b = 3.14
var c = 2
var d = b + Double(c)
//变量类型不相同不能相加
var f = Int8(5)
var g = Int16(9)
var h = Int16(f) + g
- 类型别名
typealias Decimal = Double
var a: Decimal = 3
print(a)
- if流程控制
//会报错,if要判断的是Bool类型,a是整数型,所以编译不过
var a = 1
if a {
print("\(a)")
}
//可以编译通过
var a = 1
if a == 1 {
print("\(a)")
}
- 简单的混合一组值应该用元组,特别是在函数要返回一组临时值的使用,应该用元组。复杂的值结构不该用元组。
//元组存取值
var a = (1,"3",3.14)
var (one,_,three) = a
print(one)
print(a.2)
-
oc的nil是指向一个不存在对象的指针。而swift中的nil是一个值,是代表值缺失。
-
可选绑定
//普通可选绑定
var a = Int("23")
if let b = a {
print(b)
}else{
print("nil")
}
//多值可选绑定
var a = Int("345")
var b = Int("123")
var f = Int("123r")
if let _ = a, let _ = b, let _ = f{
print(b)
}else{
print("nil")
}
- 可选类型定义以及解析
//数组b是可选类型,b中的元素也是可选类型
var b: Array? = [Int?]()
b = nil
b = [nil]
b = [1,2,3]
//强拆
print(b!)
//可选绑定
if let a = b {
print(a)
}else{
print("nil")
}
//隐士解析可选类型
var c: Array! = b
var d: Array = c
print(d)
1. 如果确定可选类型有值就用!强拆,如果不确定可以用可选绑定方式来处理
2. 隐士解析可选类型的定义,其实就是普通值
- 断言
错误处理是为了处理错误。而断言目的是发生错误时候终止程序 只在debug模式下生效,其他模式下失效
var age = -3
//断言失败终止程序
assertionFailure("app is not run")
//断言判断是否终止程序
assert(age >= 0, "A Person's age cannot be less than zero")
assert(age >= 0)
- 先决条件
在debug和release模式下有效,在unchecked模式下失效
var index = 0
precondition(index > 0, "Index must be greater than zero.")
print(index)
- 致命错误 fatalError在任何模式下都生效。往往用在父类声明了一个函数,但是不能直接用这时候可以用fatalError
func test() {
fatalError("该方法不该直接被调用!请在子类中实现该方法!")
}
- 终止程序总结
- 如果是父类中定义了实现,不希望开发者直接调用该方法,而是实现子类中的方法后再去调用。这时候应该用fatalError。
- 当写一个三方框架时候如果是因为框架使用者传入的参数不对,这时候想要终止程序应该用断言。
- 其实我们往往是因为应用出现了严重错误时候用fatalError,在不是很严重时候应该用断言,至于先决条件很少用到。