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使用mysql教程,Swift学习教程之SQLite的基础使用

    前言 在我们的日常开发中,经常会遇到用户断网或者网络较慢的情况,这样用户在一进入页面的时候会显示空白的页面,那么如何避免没网显示空白页面的尴尬呢?答案就是:先在网络好的时候缓存一部分数据,这样当下次网 ...

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

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

  3. 全面的Swift学习资料整理

    资料1 ---教程类 官方文档中文翻译http://wiki.jikexueyuan.com/project/swift/Github上的地址点我 Using Swift with Cocoa and ...

  4. 学习Swift:经验丰富的开发人员指南

    因此,您的老板希望您学习iOS应用开发. 或者,也许您有一个要处理的应用程序侧项目. 你从哪里开始? 学习新平台和编程语言可能会令人生畏. 即使您尝试学习基础知识,也会不断发布新技术,从而很难保持最新 ...

  5. swift 学习(一)

    swift学习 一.基础部分 1. 常量(let) 变量(var) swift能够自己推断变量的类型,可以不用写变量的类型 let test = "你好,世界!!" let tes ...

  6. Swift中文教程(一)基础数据类型

    基础类型 虽然Swift是一个为开发iOS和OS X app设计的全新编程语言,但是Swift的很多特性还是跟C和Objective-C相似 . Swift也提供了与C和Objective-C类似的基 ...

  7. Apple Swift学习资料汇总

    [更新]Apple Swift学习资料汇总 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 »   今年的苹果开发者大会(WWDC)上,公布了ios8的几个新特性,其中包括引入了群聊功能,支持第 ...

  8. Swift 学习总结三:数组,字典,枚举,闭包, 函数

    数组 ///创建数组//创建某一类型的含有n个初始元素的数组var array1 = [Int](repeating: 5, count: 3)//创建某一类型空数组var array2 = [Int ...

  9. 汇集了很多swift 学习指南

    https://github.com/ipader/SwiftGuide 1,059  Unstar 7,294 Fork1,966 ipader/SwiftGuide  Code  Issues 0 ...

最新文章

  1. java 中文分词 比较_中文分词工具评估:chinese-segmentation-evaluation
  2. uipath sequence传递参数_多孔材料测试及声学参数识别(中)_多孔材料声学参数正向识别...
  3. canvas并查集画随机迷宫
  4. 博客园里如何防垃圾评论
  5. 微软杀毒软件 Microsoft Defender 将发布 Linux 版本
  6. 程序员如何解决并发冲突的难题?
  7. 菜鸟学Linux 第030篇笔记 yum使用,源码编译安装
  8. 一些自己使用VS2015的心得
  9. 《我的祖国》正确英译应该是《The Evercountry, Mine》
  10. 与近似比固定算法的高性能算法
  11. 从源码理解Bean的生命周期执行顺序
  12. java中的抽象工厂模式
  13. 一个新手学习python、pys60的感受
  14. win10浏览器html乱码,win10系统浏览器字体乱码的解决方法
  15. 缓冲区溢出基础实践(二)——ROP 与 hijack GOT
  16. 预告:揭秘7*24小时用数学解码交易的神秘玩家,量化交易者——TokenInsight对话首席...
  17. switch服务器帐户注销,堡垒之夜NS版Guest账号怎么更换_Guest账号退出更换方法介绍...
  18. 卷积层的dropout - dropblock
  19. 简单的flask+nginx项目助你开阔思路
  20. 上班划水神器:一个可以在控制台玩斗地主项目!

热门文章

  1. centos 7安装 navicat
  2. c++ vector向量直接赋值_vector-Jacobian product 解释 ---- pytorch autograd
  3. linux如何给用户加sudo权限,如何在Linux环境为用户添加sudo权限
  4. java反射类带构造函数_java中反射类的加载和构造函数
  5. angular 定义对象_angular – 使用对象定义定义FomGroup
  6. [k8s] 第五章 Pod详解
  7. iOS NSRunloop 详解
  8. java docx word api_javadoc生成word接口文档
  9. 8年面试官问到:数据库自增 ID 用完了会咋样?
  10. ajax异步后台存放购物车表,jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)...