您的位置:首页 > 移动开发 > Swift

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

2016-10-02 18:01 357 查看
可选类型是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) //强制解包
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息