DahuangPhoneiOSSwift → Swift中可选类型与可选链 ! 和 ? 的作用


  共有8297人关注过本帖树形打印复制链接

主题:Swift中可选类型与可选链 ! 和 ? 的作用

帅哥哟,离线,有人找我吗?
dahuangphone
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:407 积分:4533 威望:0 精华:0 注册:2012/9/29 7:54:10
Swift中可选类型与可选链 ! 和 ? 的作用  发帖心情 Post By:2014/10/11 20:58:30 [只看该作者]

// 类型后面加上?(不能有空格)代表可能是这个类型,可能什么都不是,但绝对不会是别的类型

var x:Int//代表x可能是一个int类型,也可能什么都不是,但是绝对不会是其他类型


//在一个可选类型变量后面加上!(不能有空格),代表确定这个变量有值,可以直接读取,但是如果这个变量没有值,就会crash


//因此对于可选值,一定要先用if判断是有值,再用!读取


func divide(a:Int,b:Int)->Double?{  //这个函数可能返回一个double,也可能是nil,所以返回值要加上一个?

    if b==0 {

        return nil

    }

    return Double(a)/Double(b)

}


let result:Double?=divide(0, 1//读取函数的返回值也要用可选类型


var res:Bool=true

var re:Double=0


if result{

    re=result//此处必须用!读取

}else{

    println("error")

}


//普遍使用判断方法如下


if let result=divide(3, 0){   //这里的let result可能是一个nil也可能是一个double,但都会确定数据类型

    re=result  //这行就不用!来读取数据

}else{

    println("error")

    re=0

}


// 对于带有?的数据类型,什么时候加!什么时候不加,当单独使用的时候可以不加!,但是如果要与其他数据进行运算操作,一定要加!,否则编译器无法知道这个数据会返回什么类型,不能计算



//可选链


class Emplyee{

    var no:Int=0

    var name:String=""

    var job:String?

    var salary:Double=0.0

    

    var dept:Department?

}


struct Department{

    var no:Int=0

    var name:String=""

}


var emp=Emplyee()

var deptName=emp.dept?.name //此处的问号为可选链,一旦emp.deptnil,可以返回nil,如果使用!而又为nilcrash


 回到顶部