/**
16.1-可选类型深入探讨
可选链 Optional Chaining
*/
var opa: Int?
/**
那么这个就是一个可选类型,本质上是这种写法
*/
// var opa1 = Optional<Int>
/**
Optional 本身是匿名枚举
public enum Optional<Wrapped> : ExpressibleByNilLiteral
case none
/// The presence of a value,stored as `Wrapped`.
case some(Wrapped)
*/
/**
设计者 相应的类型?
可选类型有两种状态: 有值 没有值nil
*/
/**
这个是基本类型,使用之前必须初始化。
那么可选类型的,使用之前可以不初始化。
这样子设计有什么好处,安全!!!
因为不管我们在什么时候访问某个普通变量都是有意义的。
普通变量的状态,只有一种:有值。
那么我们知道在 C语言和 Objective-C中普通变量有可能有值,有可能没有值,可以有多种状态。
但是在 Swift中普通变量只有一种状态有值。
*/
var a: Int = 1
print(opa ?? 3)
print(a)
/**
在传统的语言中,比如 C语言 Objective-C
在访问没有初始化的 变量的时候有可能会引起程序的崩溃。
所以Swift的设计者吸取了传统语言的教训,变量使用之前必须初始化,那么就不会出现
这样子的错误。但是考虑到基本类型的局限性,这个设计者有设计了可选类型。
设计者的这种设计理念,杜绝由于访问了没有初始化的变量而出现的各种问题。
*/
/**
可选类型是安全的吗?
我认为可选类型是安全的。因为我们在访问之前要解包,解包之前要判读它有值还是没有值。
*/
if let xa = opa {
print(xa)
}
/**
NSData *data = [NSData dataWithContentsOfFile:@"/ect/passwd.txt"];
NSLog(@"%@",data);
*/
var data: NSData? = NSData.init(contentsOfFile: "/ect/passwd.txt")
// print(data!)
if let dd = data {
print(data!)
}