Swift教程之解包操作【感叹号的用法】

原创 2015年07月09日 14:12:00
//MARK:-----------可选类型!的用法------------
/* 解包(!的用法)
如果确定一个可选类型的对象的值一定存在,那么我们使用 !进行解包获取它的值,或者使用Optional Binding。
*/
let possibleString: String? = "An optional string."
print(possibleString!) // 解包,我确定possibleString的值一定存在,不需要每次验证值是否存在

let stringValue = possibleString!.hashValue   //解包,这里的!表示“我确定这里的的possibleString一定是非nil的,尽情调用吧”

//Optional Binding,等价于上面一行
if let sValue = possibleString
{
    let stringValue = sValue.hashValue
}


/*
考虑下这一种情况,我们有一个自定义的MyViewController类,类中有一个属性是myLabel,myLabel是在viewDidLoad中进行初始化。因为是在viewDidLoad中初始化,所以不能直接声明为普通值:var myLabel : UILabel,因为非Optional的变量必须在声明时或者构造器中进行初始化,但我们是想在viewDidLoad中初始化,所以就只能声明为Optional:var myLabel: UILabel?
虽然我们确定在viewDidLoad中会初始化,并且在ViewController的生命周期内不会置为nil,但是在对myLabel操作时,每次依然要加上!来强制拆包(?也OK),比如:

myLabel!.text = "text"
myLabel!.frame = CGRectMake(0, 0, 10, 10)

对于这种类型的值,我们可以直接这么声明:var myLabel: UILabel!, 这种是特殊的Optional,称为Implicitly Unwrapped Optionals, 直译就是隐式拆包的Optional,就等于说你每次对这种类型的值操作时,都会自动在操作前补上一个!进行拆包
*/

//你可以把 隐式解包可选类型 当成对每次使用的时候自动解包的可选类型。即不是每次使用的时候 在变量/常量后面加!,而是直接在定义的时候加!
let assumedString: String! = "An implicitly unwrapped optionalstring."
print(assumedString)      //访问其值时无需感叹号


/*总结 ! 使用场景
强制对Optional值进行解包(unwrap)
声明 隐式拆包的可选类型(Implicitly Unwrapped Optionals)值,一般用于类中的属性
*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

swift中的可选类型Optional?、解包!和隐式解包的可选类型的用法

可选类型(?) /* 这个值要么存在, 并且等于x, 要么不存在 */举个例子 由于toInt方法可能会失败,因此它会返回一个可选的Int类型,而不同于Int类型。一个可选的Int类型...

Swift教程之可选类型【问号的用法】

//MARK:-----------可选类型?的用法------------ /* ----------------------------------------------------------...

swift教程【入门】 解开闭包迷惑

在计算机命题中,闭包是个相对复杂的命题,它的概念很抽象,所以这章是查找了许多资料,争取能浅显易懂的,让大家能够理解闭包这个概念 《1》闭包概念:       闭包是自包含的匿名函数代码块,...

Swift教程_零基础学习Swift完整实例(二)_swift基础(简单值、控制流、方法和闭包)

三、Swift基础介绍 本章将对Swift做一个简单说明,内容取自《The Swift Programming Language》及http://www.chinaz.com/swift/的中文翻译,...

Swift教程_CoreData实例(五)_构建控制层(添加数据)

4.添加数据 我们自定义一个列表控制器PKOBookDetailTableViewController,并应用到storyboard的明细显示view中,用来显示所选中的book的明细。通过PK...

Swift教程_CoreData实例(三)_构建控制层(列表数据加载、删除数据)

四、构建数据层 数据层总体结构包括由CoreData构建的数据模型、通过AppDelegate构建相应的初始化对象。 coredata数据最终的存储类型可以是:SQLite数据库,XML,二进...

Swift教程之条件语句

//MARK:----if条件语句 //if let isOK = true if isOK { print("我好了") } else { print("我没好") } //三元运算...

iOS8自定义Collection View Cell - Swift教程

Collection View提供了一个灵活方式展示集合视图,用法有点类似Table View类.使用Collection view可以实现网格或者实现任何你能想象到的布局。在这篇教程中将实现自定义c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift教程之解包操作【感叹号的用法】
举报原因:
原因补充:

(最多只允许输入30个字)