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)值,一般用于类中的属性
*/

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

Python赋值--序列解包

Python有一种一次给多个变量赋值的方法,称为序列解包其形式如下: >>> x, y, z = 1, 2, 3 >>> print x, y, z 1 2 3 >>>  使用这种方式赋值,...
  • AlexWoo0501
  • AlexWoo0501
  • 2015年07月18日 20:50
  • 2304

freemarker优点--重点freemarker感叹号的用法

freemarker 感叹号
  • guoshijie1993
  • guoshijie1993
  • 2017年05月22日 10:43
  • 898

js函数前加分号和感叹号是什么意思?有什么用?

原文链接: http://www.cnblogs.com/mq0036/p/4605255.html (function($) { //... })(jQuery); 今天...
  • hellochenlu
  • hellochenlu
  • 2016年09月20日 10:43
  • 740

《从零开始学Swift》学习笔记(Day 28)——总结使用问号(?)和感叹号(!)

原创文章,欢迎转载。转载请注明:关东升的博客  在使用可选类型和可选链时,多次使用了问号(?)和感叹号(!),但是它们的含义是不同的,下面我来详细说明一下。 1. 可选类型中的问号(?)声明这个类型是...
  • tonny_guan
  • tonny_guan
  • 2015年10月30日 09:27
  • 2876

Silver:用Swift编写iOS、Android和.NET应用

摘要:Silver编译器可以为.NET CLR、Java/Android JVM和Cocoa运行时提供编译工作,尽管支持iOS、Android和Windows平台,但却有着非常明确的非跨平台定位,致力...
  • u010739551
  • u010739551
  • 2015年03月02日 10:02
  • 477

中文版 Apple 官方 Swift 教程《The Swift Programming Language》

Swift 初见 本页内容包括: 简单值(Simple Values)控制流(Control Flow)函数和闭包(Functions and Closures)对象和类(Objects ...
  • investzhu
  • investzhu
  • 2014年06月13日 19:37
  • 1698

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

//MARK:-----------可选类型?的用法------------ /* ----------------------------------------------------------...
  • pengyuan_D
  • pengyuan_D
  • 2015年07月09日 14:11
  • 465

iOS 8 Metal Swift 教程(二):3D图形

在开始之前,你可以先参考一下本系列的第一篇教程: - iOS 8 Metal Swift教程(一) :开始学习 在本篇教程中,你将应用到3D图形中的一系列矩阵变换,并会学习到如下内容: ...
  • sunyazhou13
  • sunyazhou13
  • 2014年11月07日 10:24
  • 932

struts2动态方法调用 感叹号

想通过感叹号!来调用动态方法 需要在struts2.xml中加上
  • showbaba3
  • showbaba3
  • 2015年03月30日 14:45
  • 771

Window confirm()方法

一 定义和用法 confirm()方法用于显示一个带有指定消息和确认及取消按钮的对话框。 如果访问者点击"确定",此方法返回true,否则返回false。   二 语法 confirm(me...
  • chengqiuming
  • chengqiuming
  • 2017年04月12日 10:37
  • 421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift教程之解包操作【感叹号的用法】
举报原因:
原因补充:

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