程序员iOS DeveloperiOS开发

swift中可选类型optional(?和!)的各种使用场景

2017-05-29  本文已影响0人  LewisZhu

一.可选类型optional的引入

二.可选类型开发中的使用场景

为了方便阅读先将使用场景用图表总结,后面一一举例解释:

序号 可选项用处场景 详情
1. 定义时用? 表示变量可为nil,或者有个值
2. 定义时用! 表示定义时一定有初始值,但是后面使用的时候可能为nil
3. 用!强制解包 使用前最好先判断是否为nil,或者用gurd let/var (if let/var)处理
4. 用?可选解包 常用于调用方法,如果为nil就什么也不做,不为nil则继续执行
5. 类型转换:as? 转换时前面的类型是可选的
6. 类型转换:as! 转换时前面的结果一定有值
7. 类型转换:as 常用于把OC类型转为swift类型:NSString转为String,NSArray转为[],NSDictionary转为{}

1.定义时候用"?"

var oneA: Int? = nil
// oneA现在不包含值
var twoA: String?
//twoA 被自动设置为 nil

2.定义时候用"!",即就是:隐式解包

let testA: String! = "asdf"
let testB: String = testA //此处我们不需要!来对testA 进行显示解包

很显然,隐式解包的写法会带来一个潜在的危险,变量在使用过程中可能被赋为nil,如果尝试访问一个为空的隐式解包Optional, 就会遇到一个runtime error。解决这个问题一般可以用if语句,或者if let/var.

if(testA != nil){
    ……
}

3.用"!"强制解包

if let testB = testA {
    print(testB)
}
guard let testB = testA else{
    ……
    break
}

4.用"?"可选解包

customeClass?.customeFun(parm:"testParm")

5.类型转换的时候用:as?

//Animal的子类是Cat
let animal:Animal = Cat()
if let cat = animal as? Cat{
    print("cat is not nil")
} else {
    print("cat is nil")
}

6.类型转换的时候用:as!

//Animal的子类是Cat
let animal :Animal  = Cat()
let cat = animal as! Cat

7.类型转换的时候用:as

//Animal的子类是Cat
let cat = Cat()
let animal = cat as Animal
let num1 = 42 as CGFloat
let num2 = 42 as Int
let num3 = 42.5 as Int
let num4 = (42 / 2) as Double

以上就是swift中optional类型所收集到常用的使用场景,欢迎评论交流,THX!

上一篇 下一篇

猜你喜欢

热点阅读