可选类型,可选绑定,隐式解析,错误处理,断言
let possibleNumber1 = "1"
let possibleNumber2 = "1sa"
//可以转换的时候,有值,否则为 nil,故 convertedNumber1 和 convertedNumber2 的类型为 Int?
let convertedNumber1 = Int(possibleNumber1)
let convertedNumber2 = Int(possibleNumber2)
print("\(convertedNumber1!)") //当明确一个可选类型有值得时候,可在其后加一个感叹号'!' 来获取这个值
let a = 1 + convertedNumber1! //不加感叹号的话,无法获取这个可选类型的值
//注意:使用感叹号获取可选类型的值得时候,必须确定该可选类型是有值的,否则会报错
if convertedNumber1 != nil {
let b = 5 + convertedNumber1!
//let c = 9 + convertedNumber2! //此时,convertedNumber2 这个可选类型的值为 nil, 故不能用感叹号获取它的值
}
//可选绑定--> 如果一个可选类型有值,则将其赋给一个临时的常量或变量,此时无需再通过感叹号获取值之后再赋值给临时常量或变量
if let some = Int(possibleNumber1) {
}
//隐式解析是指可以确认该可选类型在赋值后一直有值
let possibleString:String? = "an option string."
let forcedString:String = possibleString!
let assumedString:String! = "an implicity unwrapped optional string"
let implicitString:String = assumedString //这里无需感叹号
//注:如果一个变量之后可能变为 nil 的话,请不要使用隐式解析可选类型,若需要在变量的生命周期中判断是否为 nil 的话,请使用普通可选类型
//错误处理
func canThrowAnError() throws {
//一个函数可以通过在声明的时候添加 throws关键词来抛出错误信息,当你的函数能抛出错误信息时,应当在表达式中前置 try 关键词
}
do {
try canThrowAnError()
//没有错误抛出
} catch {
//有错误抛出
}
//断言
let age = -3
assert(age > 0,"A person's age can not be less than zero") //此时触发断言,提示错误,程序无法继续
//注"当代码使用优化编译的时候,断言将会被禁用,例如在 Xcode 中,使用默认的 target Release 配置选项来 bu ild 时,断言会被禁用
网友评论