基础部分

274 阅读3分钟
  1. 如果你的代码中有不需要改变的值,请使用 let 关键字将它声明为常量。只将需要改变的值声明为变量var。
  2. 在变量名后边加上冒号和空格来添加类型标注
var red, green, blue: Double
  1. 如果要在一行内执行多条语句要写分号分隔符
let cat = "🐱"; print(cat)
// 输出 "🐱
  1. 不想打印换行符
let cat = "🐱"; print(cat, terminator: " --- ")
print("test")

  1. Int和UInt优先使用Int,可以避免类型转换。即使知道要存储的值是非负数也应该用Int类型。
    也就是说应该用Int不用UInt,来保持通用型,和避免类型转换。

  2. Double和Float类型,优先使用Double,Double是swift默认的小数类型,精度更高. 也就是说使用Double不用Float,类保持代码统一性,避免类型转换.

  3. 数值类字面量可以包含0或者_来表示,增强可读性

  4. 字面量数值可以直接相加,但是变量要类型一致才可以相加

//字面量可以直接相加
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

  1. 类型别名
typealias Decimal = Double

var a: Decimal = 3
print(a)
  1. if流程控制
//会报错,if要判断的是Bool类型,a是整数型,所以编译不过
var a = 1
if a {
    print("\(a)")
}

//可以编译通过
var a = 1
if a == 1 {
    print("\(a)")
}

  1. 简单的混合一组值应该用元组,特别是在函数要返回一组临时值的使用,应该用元组。复杂的值结构不该用元组。
//元组存取值
var a = (1,"3",3.14)
var (one,_,three) = a
print(one)
print(a.2)
  1. oc的nil是指向一个不存在对象的指针。而swift中的nil是一个值,是代表值缺失。

  2. 可选绑定

//普通可选绑定
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")
}

  1. 可选类型定义以及解析
//数组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. 隐士解析可选类型的定义,其实就是普通值
  1. 断言
    错误处理是为了处理错误。而断言目的是发生错误时候终止程序 只在debug模式下生效,其他模式下失效

var age = -3
//断言失败终止程序
assertionFailure("app is not run")

//断言判断是否终止程序
assert(age >= 0, "A Person's age cannot be less than zero")
assert(age >= 0)
  1. 先决条件
    在debug和release模式下有效,在unchecked模式下失效
var index = 0

precondition(index > 0, "Index must be greater than zero.")

print(index)
  1. 致命错误 fatalError在任何模式下都生效。往往用在父类声明了一个函数,但是不能直接用这时候可以用fatalError
func test() {
    fatalError("该方法不该直接被调用!请在子类中实现该方法!")
}
  1. 终止程序总结
    1. 如果是父类中定义了实现,不希望开发者直接调用该方法,而是实现子类中的方法后再去调用。这时候应该用fatalError。
    2. 当写一个三方框架时候如果是因为框架使用者传入的参数不对,这时候想要终止程序应该用断言。
    3. 其实我们往往是因为应用出现了严重错误时候用fatalError,在不是很严重时候应该用断言,至于先决条件很少用到。