原文:Swift语言指南(七)--语言基础之布尔值和类型别名

布尔值

Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false)。Swift提供了两个布尔常量值:truefalse

 let orangesAreOrange(橙子是橙子) = true
let turnipsAreDelicious(芜菁很美味) = false

orangesAreOrangeturnipsAreDelicious被推断为布尔类型,因为它们的值被布尔字面量给初始化了。与前文提到的IntDouble一样,不需要特意为变量或常量声明为bool,只要你在创建时将其值设为truefalse即可(值为truefalse后,Swift会推断其位bool类型--Joe.Huang)。已知类型的值初始化为常量或变量时,类型推断使Swift代码更简练更具可读性。

在你使用if这样的条件判断语句时,布尔值(bool)非常有用:

 if turnipsAreDelicious {
println("Mmm, tasty turnips!")//咦,芜菁真好吃!
} else {
println("Eww, turnips are horrible.")//呸呸呸,芜菁太难吃了.
}
// prints "Eww, turnips are horrible.//输出 “呸呸呸,芜菁太难吃了.”

诸如if类的条件控制语句详见流程控制一章。

Swift的安全类型机制可以避免非布尔值被当做布尔值使用,下面的例子在编译时会报错:

 let i =
if i {
// this example will not compile, and will report an error
//这个例子不会被编译,而且会报错 ,因为i是Int型--Joe.Huang
}

而下面的这个例子会编译通过:

 let i =
if i == {
// this example will compile successfully
//这个例子是成功编译的,因为i==1返回true,返回值是bool--Joe.Huang
}

i == 1 比较的结果类型为 Bool,因此第二个例子可以通过类型检验。i == 1 这类的比较在 基本运算符(暂未译到) 一章讨论。

与 Swift 中的其他类型安全规则一样,这些规则可避免偶然性突发性的错误,并确保各段代码的目的总是明晰的。

类型别名

类型别名(type aliases)是已有类型的可替代性名称(为已有类型提供了一个可替代性的名称),使用关键字typealias定义一个类型别名。

类型别名在你需要为上下文中的已有类型提供一个更贴切的名字时非常有用,例如当处理来自外部数据源的特定宽度的数据时:

 typealias AudioSample(音频采样) = UInt16

一旦定义完了类型别名,你就可以在其他地方以类型别名替代已有类型的原始名字:

 var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound is now 0 //maxAmplitudeFound(最大振幅)现在是0,基于上例中AudioSample被定义为十六进制的别名后,AudioSample.min就是UInt16.min。--Joe.Huang

此处 AudioSample 作为 UInt16 的别名定义。因为它是别名,因此对 AudioSample.min 的调用实际上是调用 UInt16.min,最终为 maxAmplitudeFound 变量提供一个初始值 0。

谢谢,Swifter-QQ群:362232993,同好者进~

Fork:https://github.com/Joejo/Swift-lesson-for-chinese

Swift语言指南(七)--语言基础之布尔值和类型别名的更多相关文章

  1. Swift语言指南(一)--语言基础之常量和变量

    原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...

  2. Swift语言指南(二)--语言基础之注释和分号

    原文:Swift语言指南(二)--语言基础之注释和分号 注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时会忽略注释. Swift的注释与C语言极其相似,单 ...

  3. Swift语言指南(三)--语言基础之整数和浮点数

    原文:Swift语言指南(三)--语言基础之整数和浮点数 整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,3 ...

  4. Swift语言指南(八)--语言基础之元组

    原文:Swift语言指南(八)--语言基础之元组 元组 元组(Tuples)将多个值组合为一个复合值.元组内的值可以是任何类型,各个元素不需要为相同类型(各个元素之间类型独立,互不干扰--Joe.Hu ...

  5. Swift5 语言指南(七) 集合类型

    Swift提供三种主要的集合类型,称为数组,集合和字典,用于存储值集合.数组是有序的值集合.集是唯一值的无序集合.字典是键值关联的无序集合. Swift中的数组,集合和字典总是清楚它们可以存储的值和键 ...

  6. Language Guide (proto3) | proto3 语言指南(八)未知字段和任意类型

    未知字段和任意类型篇幅较少,因此将他们合并到本文进行描述. Unknown Fields - 未知字段 未知字段是格式良好的协议缓冲区序列化数据,表示解析器无法识别的字段.例如,当一个旧二进制代码解析 ...

  7. 数据结构基础——结构体struct及类型别名typedef的使用

    一.结构体的创建 在C语言中,实现数据结构的一种常用方法便是使用结构体(structure)其示例代码如下: struct stu { int num; char ch; }; struct表示创建结 ...

  8. JS基础_返回值的类型

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系

    一. PropTypes 与 DefaultProps 官方文档 1. PropTypes 属性校验 引入 PropTypes import PropTypes from 'prop-types'; ...

随机推荐

  1. Mongodb安装和配置

    Mongodb之安装配置 安装 Mongodb的下载地址为Mongodb官网.下载时.你能够选择是安装包或者是压缩包. 下载完毕后.双击安装包并安装. 安装完毕后.你能够在安装文件夹看到下图中所见的文 ...

  2. FireFox VS Chrome 之 调试篇

    一个完美的调试工具,FireBug! 精确跟踪每一步.仅仅要按下图所看到的,选择"脚本",然后在下方选择脚本所在的文件就可以对该文本的运行进行断点跟踪. 而且仅当一个线程运行结束后 ...

  3. hdu 3652 B-number(数字dp)

    http://acm.hdu.edu.cn/showproblem.php? pid=3652 大致题意:"B-number"即一个整数含有子串"13"且被13 ...

  4. /dev/shm(转)

    引用网上:/dev/shm首先可以看出来/dev/shm是一个设备文件, 可以把/dev/shm看作是系统内存的入口, 可以把它看做是一块物理存储设备,一个tmp filesystem, 你可以通过这 ...

  5. TextWatcher原因activity内存泄漏问题

    TextWatcher原因activity内存泄漏. EditText配置addTextChangedListener该接口,至onDestroy电话里removeTextChangedListene ...

  6. OpenCVR 有新成员 OpenCVV OpenCVC

    OpenCVC主要负责OpenCVR报名, OpenCVV支持Android IOS Mac Windows 的client 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  7. 多快好省的做个app开发

    从技术经理的角度算一算,如何可以多快好省的做个app [导读]前端时间,一篇“从产品经理的角度算一算,做个app需要多少钱”的文章在网上疯传,可见大家对互联网创业的热情!这次,从一名技术经理的角度再给 ...

  8. 【Hibernate步步为营】--(一对多映射)之双向关联

    上篇文章讨论了单向关联的一对多映射,在一的一端维护双向的关系这样的做法尽管能实现可是存在非常多缺陷,首先生成非常多多余的SQL语句,由于多的一端不维护关系,仅仅有一的一端维护,在进行操作时一的一端会发 ...

  9. Programming from the ground up(0)

    这本书的英文版是开源.我读了一些.但是,支持的英语水平不走太,然后还有那些谁译的书,但感觉不是太干脆翻译,在一些地方难以清除作者的思路,所以,我要揍很难理解他自己翻译一下原来的地方,这将更好地了解一点 ...

  10. ruby 删除文件夹(包括文件夹中的文件夹和文件)

    def deleteDirectory(dirPath) if File.directory?(dirPath) puts "是文件夹"; Dir.foreach(dirPath) ...