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) //因为varoptnil所以dest的值为10


/* 解包:所谓解包就是将Optional类型变量的值解包出来(取出来)

强制解包:opt! 如果强制解包一个nil的值,

fatal error: unexpectedly found nil while unwrapping an Optional value */

var optstr:String?

//println(optstr!.toInt())

println(optstr?.toInt()) //非强制解包,如果optstrnil的话则返回一个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.residencenil,则该函数的调用为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

//


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值