// Swift 可选
/**
注意:C 和 Objective-C 中并没有可选这个概念。最接近的是 Objective-C 中的一个特性,一个方法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”。然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C 方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失。这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift 的可选可以让你暗示任意类型的值缺失,并不需要一个特殊值。
*/
// 例子
//使用可选(optionals)来处理值可能缺失的情况
let abc = "123"//申明一个字符串abc 其值为"123"
let xyz = Int(abc) //转成int型 若可转成功 为Optional(123) 否为nil
//返回的是一个可选的值
print(xyz)
if (xyz != nil){
print("\(abc) has an integer value of \(xyz!) ")
}
//当确定某个可选的确切有值的时候,可以用 "!"来强制解析他。
//类型标注
var ser :Int? = 404
ser = nil
//类型标注
var www :String? // www 就是nil
/**
Swift 的nil和 Objective-C 中的nil并不一样。在 Objective-C 中,nil是一个指向不存在对象的指针。在 Swift 中,nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选都可以被设置为nil,不只是对象类型。
**/
/*
一个隐式解析可选其实就是一个普通的可选,但是可以被当做非可选来使用,并不需要每次都使用解析来获取可选值。下面的例子展示了可选String和隐式解析可选String之间的区别:
纯文本复制*/
let possibleString: String? = "An optional string."
print(possibleString!) // 需要惊叹号来获取值
// 输出 "An optional string."
let assumedString: String! = "An implicitly unwrapped optional string."
print(assumedString) // 不需要感叹号
// 输出 "An implicitly unwrapped optional string."
//断言 判断一个条件是否为真
//你可以使用全局assert函数来写一个断言。向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示:
let age = -3
assert(age >= 0, "a person's old cannot be less than zero")
//如果 age >=0 不会出错 。但是 <0 断言被立即触发 执行不下去.
//何时使用断言
//
//当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:
//整数的附属脚本索引被传入一个自定义附属脚本实现,但是下标索引值可能太小或者太大。
//需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
//一个可选值现在是nil,但是后面的代码运行需要一个非nil值。