Swift学习记录 -- 10.可选类型的使用

可选类型是Swift学习中的一个难点 , OC中也没有解包的概念 , 并且其实咱们在运用OC编程中 , 很多的操作都是不安全的 ,然而在Swift中已经感受到了强类型语言的严谨性和安全性


        //为什么要有可选类型 ? 因为在开发中,很多时候我们初始化一个变量,而并不会立即对其赋值 , 然而基本数据类型我们可以初始化 0 ,如果是其他类型比如字符串 , 我们没有办法对其直接赋值为nil 
//        let name = nil 报错
//        let name:String = nil 报错

        let name:String
        name = "xiaoming"  //此种写法虽然不报错 ,但是在定义类里,必须要有初始值   如下类 . 此时我们就用到了可选类型

//定义一个类,这里只是证明类里的属性必须做初始化
class Student: NSObject {

//    var name:String  报错
    var name:String? = nil //可选类型初尝试

}
        //1.定义可选类型
        //可选类型写法1 :(不常用)
        var name1:Optional<String> = nil

        //可选类型写法2 :(常用,语法糖)
        var name2:String? = nil


        //2.给可选类型赋值
        name2 = "my"
        //3.取出可选类型值
        print(name2) //注意:此处取出的类型是Optional ,并非我们想要的String类型 ,所以此处可以进行强制解包 ,将name2从Option包中解除
        print(name2!) //强制解包 ,打印内容类型为String
        //注意:强制解包操作非常危险 ,因为如果可选类型中的值为nil ,系统会崩溃
        //所以在解包前,必须进行判断 ,只有当包里的内容不为nil时才进行强制解包
        if name2 != nil {
            print(name2)
        }
        //4.可选绑定 (应用场景:如果我要反复的使用一个Optional包里的内容,如果我每次使用都要进行解包,是十分忧桑的一件事,所以苹果推出了一个可选绑定的语法如下)

        //实质上 let tempName = name2 这句话做了2个操作
        //1.判断name2 是否为nil ,如果为nil ,直接不执行{}中的内容
        //2.如果name2 不为nil ,进行解包并赋值给tempName, 执行{}中的内容

        //写法一 (不常用)
        if let tempName = name2 {

            print(tempName)
        }

        //写法二 (常用)
        if let name2 = name2 {
            print(name2)
        }
        //5. 可选类型的使用场景
        //通过一个字符串创建一个URL
        let url = NSURL(string: "http://www.jyall.com") //此方法返回值为NSURL? ,如果使用url:NSURL 直接报错,类型不一致
        let url1:NSURL? = NSURL(string: "http://www.jyall.com")

        //根据URL创建NSRequest
        if let url1 = url1 {
            let request = NSURLRequest(URL: url1) //强制解包
        }

你可能感兴趣的:(iOS,Swift)