Implicitly Unwrapped Optionals    隐式解析选项

如上所述。可选意味着常数或变量“没有值”。通过可选if声明来推断是否存在值,假设有值析值。

有时候在程序架构中,第一次被赋值之后。能够确定一个可选总会有值。

在这样的情况下。每次都要推断和解析可选值是很低效的,由于能够确定它总会有值。

这样的类型的可选被定义为隐式解析可选(implicitly unwrapped optionals)。

把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选。

当可选被第一次赋值之后就能够确定之后一直有值的时候,隐式解析可选很实用。隐式解析可选主要被用在 Swift 中类的构造过程中,请參考类实例之间的循环强引用。

一个隐式解析可选事实上就是一个普通的可选,可是能够被当做非可选来使用,并不须要每次都使用解析来获取可选值。以下的样例展示了可选String和隐式解析可选String之间的差别:

let possibleString: String?

= "An optional string."
println(possibleString!) // requires an exclamation mark to access its value
// prints "An optional string." let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString) // no exclamation mark is needed to access its value
// prints "An implicitly unwrapped optional string.

你能够把隐式解析可选当做一个能够自己主动解析的可选。

你要做的仅仅是声明的时候把感叹号放到类型的结尾,而不是每次取值的可选名字的结尾。

注意:假设你在隐式解析可选没有值的时候尝试取值。会触发执行时错误。和你在没有值的普通可选后面加一个惊叹号一样。

你仍然能够把隐式解析可选当做普通可选来推断它是否包括值:

if assumedString {
println(assumedString)
}
// prints "An implicitly unwrapped optional string.

你也能够在可选绑定中使用隐式解析可选来检查并解析它的值:

if let definiteString = assumedString {
println(definiteString)
}
// prints "An implicitly unwrapped optional string.

注意:假设一个变量之后可能变成nil的话请不要使用隐式解析选项。假设你需要推断一个变量的生命周期是否nil如果。请使用普通的可选类型。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Swift学习——Swift解释特定的基础(七)的更多相关文章

  1. Swift学习——Swift基础具体解释(一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/34807025 注:由于基础部分在Swi ...

  2. Swift学习——Swift解释具体的基础(六)

    Optionals    可选 可选(它似乎并不如此翻译)它适用于那些值这种情况可能是空的,有两种情况一个可选:存在值并等于x,要么值不存在. 选配的概念在OC和C里面并没有.在OC中最接近的概念就是 ...

  3. swift学习笔记1——基础部分

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  4. 零基础使用Swift学习数据科学

    概述 Swift正迅速成为数据科学中最强大.最有效的语言之一 Swift与Python非常相似,所以你会发现2种语言的转换非常平滑 我们将介绍Swift的基础知识,并学习如何使用该语言构建你的第一个数 ...

  5. 一步一步学习Swift之(二):好玩的工具playground与swfit基础语法

    playground好于在于能一边写代码一边看到输出的常量变量的值.不需要运行模拟器. 我们来试一下该工具的用法. 打开xcode6开发工具,选择Get started with a playgrou ...

  6. swift 学习(一)基础知识 (基本数据类型,操作符,流控制,集合)

    xcode 中调用API帮助 1.查看简单信息,选中后 按键 control +左键单击  或者按 右侧属性栏 里的帮助按钮 2.完整API,选中后 按键 control +左键双击 3.查看类.函数 ...

  7. ios -- 教你如何轻松学习Swift语法(三) 完结篇

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.自动引用计数   1.自动引用计数工作机制      1.1 swift和o ...

  8. ios -- 教你如何轻松学习Swift语法(一)

    目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...

  9. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

随机推荐

  1. chromium for android v34 2dcanvas硬件渲染实现分析

    这篇接着上一篇2dcanvas硬件绘制,分析保存绘制结果的texture被合成到on screen framebuffer上的过程. 1.webkit为canvas元素相应的render树节点Rend ...

  2. 【NO.3】 c program to caculate and display sum of two matrix

    source code: #include "stdafx.h" /* display sum of two matrix*/ int _tmain(int argc, _TCHA ...

  3. Replace是替代 Split分割字符串

    Replace是替代 Split分割字符串string[] ReadText = str.Replace("\r\n", "@").Split('@'); Sp ...

  4. GUIForDebug

    package gui; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; import org.luaj.vm2.ast.Chun ...

  5. POJ 3422 Kaka's Matrix Travels(费用流)

    POJ 3422 Kaka's Matrix Travels 题目链接 题意:一个矩阵.从左上角往右下角走k趟,每次走过数字就变成0,而且获得这个数字,要求走完之后,所获得数字之和最大 思路:有点类似 ...

  6. Git Flow流程

    # 1. clone远程仓库到本地 git clone git@git.oschina.net:huogh/muzhifm_xxx.git ​ # 2. 使用远程分支origin/dev创建本地分支d ...

  7. 集差集 哈希表 比较数据库的照片和server画面上,将server垃圾上的图片删除

    SSH 骨架code: public String deleRubbishAd(){ int deleADcount = 0; rubbishADtp = configDao.rubbishADtp( ...

  8. Windows 驱动发展基金会(九)内核函数

    Windows 驱动发展基金会系列,转载请注明出处:http://blog.csdn.net/ikerpeng/article/details/38849861 这里主要介绍3类Windows的内核函 ...

  9. Linux 于 shell 变数 $#,$@,$0,$1,$2 含义解释:

    变量说明: $$ Shell自己PID(ProcessID) $! Shell背景上次执行Process的PID $? 命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 全部參数 ...

  10. Bombing HDU, 4022(QQ糖的消法)

    Bombing From:HDU, 4022 Submit Time Limit: 4000/2000 MS (Java/Others)      Memory Limit: 65768/65768 ...