基础部分
基础部分这块 对于我个人来说值得注意的有以下几点 :类型安全和类型推测, Optionals(可选) ,强制解析,可选绑定,隐式解析可选,断言
1,swift 语言的类型安全和类型推断
swift 语言是类型安全的,所以你可以清晰的知道你要处理的值是什么类型的,在编译的时候他会进行类型检查( type check),类型不匹配的地方编译出错。如果你没有定义某个值的类型,swift语言会进行类型推测,选择合适的类型,如:
var test_1:Int = 20
var test_2 = 21
像这样,swift 语言必须要指定类型,但是第二种定义是被允许的 ,应为我们swift语言有类型推断.
2,optionals ( ? 表示)
Oc 中我们是知道的没这个概念,在objective-c中 当一个值从服务端返回 是值缺失的状态,往往是伴随一个特殊的值来暗示值缺失,当我们知道时我们可以预先判断,但我们不知道是往往会 crash 掉, 但是在swift中 我们有了可选这个东西 就比较好处理这种情况,当一个值不能保证一直有值的情况下 我们可以定义他为可选类型的,这样 当有值得时候正好,但是当没有值得时候,可选暗示了任意类型的值缺失,
let string = "eric"
let number:Int? = string.toInt()
number 可选类型 string 当为数字是 number 是不缺失的;
3,强制解析
当一个可选类型有值的时候,我们可以在这个可选值的后边加上 (!) 来获取他的值,这就是可选类型的强制解析(forced unwrapping)
if (number != nil) {
println("number is :\(number!)")
}
else{
println("number is nil")
}
4,可选绑定
我们可以使用可选绑定(optional binding)来判断一个可选类型是否有值,如果有值,就把这个值赋值给一个临时的常量或者变量.
if let haveValue = string.toInt(){
println("the value is \(haveValue)")
}
else{
println("the value is nil")
}
在这里由于 haveValue 被 可选包含的值初始化过,所以不用在使用强制解析,5,隐式解析可选
当我们知道一个类型总是有值的时候,如果定义成可选类型的话,每次都要去判断和解析可选值是很低效的,这样这种类型的可选可以被定义为隐式解析可选,Int? 改成 Int!
隐式解析可选不用每次使用解析来获取值
let string1:String? = "hellow" 可选
println(string1!)
let string2:String! = "hellow" 隐式解析可选
println(string2)
6 ,断言 assertion
简而言之 就是条件不满足时 你的应用会被终止。
简单格式
asser(<条件判断>, "<断言信息>") or asser(<条件判断>) 可以没有断言信息