本文主要是介绍Optional-Optional Chaining,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*
1.Optional类型表示的内容要不是某个值,要么是nil
可选类型让开发人员可以在程序运行时检测一个值是否存在,根据检查结果进行不同的处理。
2.nil coalescing operator ??
3.Optional Chaining
4.函数返回值可以是Optional的。
*/
//1.基本定义
var strNumber = "123"
var varopt:Int? //没有赋值的情况下默认为nil
varopt = strNumber.toInt()
if varopt != nil //在beta5中修改,optional的变量不可以直接用if来判断
{
println("varopt is not nil")
}
//2.nil coalescing operator ??
var dest = varopt ?? 10
//相当于 var dest = ( varopt != nil ? varopt! : 10 )
println(dest) //因为varopt是nil所以dest的值为10
/* 解包:所谓解包就是将Optional类型变量的值解包出来(取出来)
强制解包:opt! 如果强制解包一个nil的值,
fatal error: unexpectedly found nil while unwrapping an Optional value */
var optstr:String?
//println(optstr!.toInt())
println(optstr?.toInt()) //非强制解包,如果optstr为nil的话则返回一个nil的值。
//为了避免在以后每次用到optstr2,都要写为 optstr2? 的形式,可以使用隐式解包
//在定义时不是用?而是使用!来说明该变量在使用前肯定会被赋值的,在以后的使用中像正常变量一样。
var optstr2:String! = "123"
println(optstr2.toInt())
//3. Optional Chaining 可选链,比如可选变量的一个属性也是可选的。使用形式:a?.b?.c?
class Person
{
var residence: Residence?
}
class Residence
{
var numberOfRooms = 1
func printNumber()
{
println("printNumber \(numberOfRooms)")
}
}
var jone = Person()
jone.residence = Residence()
//printNumber的返回值为空的tuple,如果jone.residence为nil,则该函数的调用为nil
//否则将会执行该函数。
if jone.residence?.printNumber() != nil
{
println("Jone's has room")
}
else
{
println("Jone's has no room")
}
//字典使用
var testScores = ["Dave": [86, 82, 84], "Tim": [79, 94, 81]]
testScores["Dave"]?[0] = 91
//4.函数返回optional类型
func test(id:Int)->Int?
{
if id > 10
{
return 3
}
else
{
return nil
}
}
var id = test(3)
println(id) //返回nil,函数返回值赋值给Int?类型的id
//完
这篇关于Optional-Optional Chaining的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!