可选能够让你推断值是否存在。你能够在代码中优雅地处理值缺失的情况。然而,在某些情况下,假设值缺失或者值并不满足特定的条件。你的代码可能并不须要继续执行。这时。你能够在你的代码中触发一个断言(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. 区间dp板子题:[noi1995]石子合并

    非常经典的区间dp模板 对于每一个大于二的区间 我们显然都可以将它拆分成两个子序列 那么分别计算对于每个取最优值即可 #pragma GCC optimize("O2") #inc ...

  2. java-----任意进制间的转换

      public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Sy ...

  3. 新浪SAE创建微信模板消息应用与SVN的使用

    本地项目源文件必须放在应用名目录下面的数字目录里面.如:D:\SVN\xtmp1\1 我们在前面讲述在新浪SAE中如何建站,今天我们来详解如何上传文件.新浪SAE中是不允许用FTP来上传的.我们只能用 ...

  4. PAT基础6-7

    6-7 统计某类完全平方数 (20 分) 本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int IsTheNumbe ...

  5. python之socket编程4

    1 socketserver实现并发 基于tcp的套接字,关键是两个循环,一个通信循环,一个链接循环 Socketserver的 模块中分成两类: Server类(解决连接问题) Request类(解 ...

  6. PHP01

    1.服务端开发基础 前端开发最终还是属于web端开发的一个分支,想要成为前端程序员,就要充分理解web的概念. 网站的概念: 可以在浏览器上通过一个地址直接访问使用 用于提供一种或多种特定服务的一系列 ...

  7. 11、python阶段测试

    1.执行Python脚本的两种方式 如果想要永久保存代码,就要用文件的方式 如果想要调试代码,就要用交互式的方式 2.Pyhton单行注释和多行注释分别用什么? 单行注释:# 多行注释: '' &qu ...

  8. C#设置WebBrowser IE浏览器版本

    通过修改注册表的值,来指定winform程序打开的webBrowser的IE版本 1>方法一,通过程序修改注册表的值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  9. mac下svn提交失败的解决方法

    $svn ci maps.xml然后出现一个文件svn-commit.4.tmp,在文件svn-commit.4.tmp中有如下内容:   --This line, and those below, ...

  10. OKDownload 下载框架 断点续传 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...