可选能够让你推断值是否存在。你能够在代码中优雅地处理值缺失的情况。然而,在某些情况下,假设值缺失或者值并不满足特定的条件。你的代码可能并不须要继续执行。这时。你能够在你的代码中触发一个断言(assertion)来结束代码执行并通过调试来找到值缺失的原因。

使用断言进行调试

断言会在执行时推断一个逻辑条件是否为true。从字面意思来说,断言“断言”一个条件是否为真。你能够使用断言来保证在执行其它代码之前。某些重要的条件已经被满足。

假设条件推断为true。代码执行会继续进行;假设条件推断为false。代码执行停止,你的应用被终止。

假设你的代码在调试环境下触发了一个断言,比方你在 Xcode 中构建并执行一个应用,你能够清楚地看到不合法的状态发生在哪里并检查断言被触发时你的应用的状态。

此外。断言同意你附加一条调试信息。

你能够使用全局assert函数来写一个断言。

向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示:

let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 由于 age < 0。所以断言会触发

在这个样例中,仅仅有age >= 0为true的时候代码执行才会继续。也就是说。当age的值非负的时候。假设age的值是负数。就像代码中那样,age >= 0为false。断言被触发。结束应用。

断言信息不能使用字符串插值。断言信息能够省略,就像这样:

assert(age >= 0) 

何时使用断言

当条件可能为假时使用断言,可是终于一定要保证条件为真,这样你的代码才干继续执行。断言的适用情景:

  • 整数的附属脚本索引被传入一个自己定义附属脚本实现。可是下标索引值可能太小或者太大。
  • 须要给函数传入一个值。可是非法的值可能导致函数不能正常执行。

  • 一个可选值如今是nil,可是后面的代码执行须要一个非nil值。

请參考附属脚本和函数。

注意:断言可能导致你的应用终止执行。所以你应当细致设计你的代码来让非法条件不会出现。

然而。在你的应用公布之前,有时候非法条件可能出现,这时使用断言能够高速发现问题。

赵雅智_Swift(4)_断言的更多相关文章

  1. 赵雅智_Swift(1)_swift简单介绍及类型

    Swift 是 iOS 和 OS X 应用开发的一门新语言. 假设你有 C 或者 Objective-C 开发经验, Swift 的非常多内容都是你熟悉的. Swift 的类型是在 C 和 Objec ...

  2. 赵雅智_Android案例_刮刮乐

    实现效果 主要代码 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  3. 赵雅智_Swift(3)_swift凝视

    请将你的代码中的非运行文本凝视成提示或者笔记以方便你将来阅读. Swift 的编译器将会在编译代码时自己主动忽略掉凝视部分. 单行凝视 以双正斜杠作(//)为起始标记: // 这是一个凝视 多行凝视 ...

  4. 赵雅智_Swift(2)_swift常量和变量

    分号 Swift 并不强制要求你在每条语句的结尾处使用分号(;) 你打算在同一行内写多条独立的语句必需要用分号 let cat = "? ?? ? "; println(cat) ...

  5. 赵雅智_使用SQLiteDatabase操作SQLite数据库及事务

    知识点具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 详细代码: MainActivity.java package c ...

  6. 赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印

    上一篇已经介绍了Android种Bitmap和Canvas的使用,以下我们来写一个详细实例 http://blog.csdn.net/zhaoyazhi2129/article/details/321 ...

  7. 赵雅智_Android编码规范

    凝视 导入mycodetemplates.xml统一凝视样式 须要加凝视的地方 类凝视(必加) 方法凝视(必加) 块凝视主要是数据结构和算法的描写叙述(必加) 类成员变量和常量凝视(选择性加入) 单行 ...

  8. 赵雅智_android_frame动画

    在開始实例解说之前,先引用官方文档中的一段话: Frame动画是一系列图片依照一定的顺序展示的过程,和放电影的机制非常相似.我们称为逐帧动画.Frame动画能够被定义在XML文件里,也能够全然编码实现 ...

  9. 赵雅智:android教学大纲

    带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...

随机推荐

  1. 编程菜鸟的日记-初学尝试编程-编写函数实现strcmp功能

    #include <iostream>using namespace std;int mystrcmp(const char *str1,const char *str2){ assert ...

  2. h5本地缓存(localStorage,sessionStorage)

    H5本地存储数据 localStorage,sessionStorage的区别: 相同点:  缓存数据比cookie的范围大; localStorage:关闭浏览器数据不会消失,除非手动删除数据 se ...

  3. ionic2 隐藏滚动条

    方法 在全局样式,即app.scss里添加样式: ::-webkit-scrollbar { display: none !important; }

  4. Chrome_调试CSS

    1.我们都知道chrome浏览器打开开发者工具的Sources 栏可以查看css文件,并且可以实时修改样式,查看效果,但是这里修改的内容并不会保存到源文件中. 2.  以下方法可以使在chrome浏览 ...

  5. JS中的算法与数据结构——排序(Sort)

    排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...

  6. 【Java】maven多项目资源共享

    方案一: <resources> <resource> <!-- <directory>${project.parent.relativePath}/../. ...

  7. Eclipse预编译的include路径与宏定义

  8. html5学习笔记3——高级特性

    一:Web存储 数据以 键/值 对存在, web网页的数据只允许该网页访问使用. web存储有两种: localStorage - 没有时间限制的数据存储,存于浏览器缓存 sessionStorage ...

  9. java包名命名规范[【转】

    indi : 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者. 包名为“indi.发起者名.项目名.模块名.……”. pers : 个人项目,指个人发 ...

  10. 朗科32G TF卡的读写测试

    卡是这样的, 下面是实际测试的结果. 容量测试 SKS的USB2外置读卡器, X240内置读卡器加上SD卡套    UNITEK的USB3.0读卡器, 经过UNITEK的USB3.0 HUB 看来读4 ...