基础类型安全
Int、double 、Float 、Bool、 Array 、Set 、Dictionary
!、 ? 、guard
类型注解( ype annotation )
var str : String // 可根据声明赋值判断,也可以根据类型注解
一个十进制数,没有前缀
一个二进制数,前缀是 0b
一个八进制数,前缀是 0o
一个十六进制数,前缀是 0x
Int8 -128 ~ 127 ; UInt8 0~255
类型别名 ( typealias )
typealias myColor = UIColor
var color = myColor.red
元组(Tuple) 返回多个值
元组是把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
网络请求函数返回值 (Int, String) 元组来描述是否获取成功.
最适合函数返回值、值传递多个参数的情况,复杂的结构可以使用 Struct 、Class
可选类型( Optional )
泛指所有对象(类) >=oc 的 NSNotFound
//convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
var parameter: String? //默认值为 nil
Swift 的 nil 和 Objective-C 中的 nil 并不一样。在 Objective-C 中,nil 是一个指向不存在对象的指针。在 Swift 中,nil 不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为 nil,不只是对象类型。
异常处理
do {
try shouldDoSomething()
} catch {
<!---->
}
断言和先决条件
assert(_:_:file:line:)
precondition(_:_:file:line:)
枚举
值类型
enum SomeEnumeration {
// 枚举定义放在这里
}
//MARK :CaseIterable
SomeEnumeration.allCases.count
关联值
//元组
enum Point {
case location(Int,Int) //x,y
case space(Int,Int,Int) //x,y,z
}
var currentPoint = Point.location(10, 20)
currentPoint = .space(10, 20, 30) //覆盖location
原始值
原始值类型相同,且内容不重复
Int 类型隐式赋值同 OC NS_Enum(){}, String 隐式为 字符串名称
使用枚举成员的 rawValue 属性可以访问该枚举成员的原始值:
-> Direct.north.rawValue
var initD = Direct(rawValue: <#T##Int#>)
结构体
值类型
struct Person {
var age = 20
var name = “jack”
}
类
引用类型(同 指针)
恒等运算符 === 和 !== 判断两个变量或者常量是否引用了同一个类的实例。
区别
struct | class | 备注 |
---|---|---|
值类型 | 引用类型 | |
深拷贝 copy 副本 | 指针传递 | class存储在堆中 |
copy on write | 引用计数 | |
函数编程 | 面向对象 | |
不能继承 | single 单继承 | |
初始化 不需要实现 init :var | 需要自己实现带参数的初始化接口 | |
mutable 需要明确说明 | 一直是 mutable | |
多数都是struct(除去 协议、view ) | viewModel 在MVVM中是 class-based (需要被共享->指针类型) |
generics 泛型
//Element 泛型 T
struct Array<Element> {
func append(_ element: Element ) {
}
}
functions
也是一种类型、 (Int,Int)-> Bool
Closures
闭包 == 内联函数