Basic Operators Of Swift 2.1

原文出自:标哥的技术博客

前言

运算符是检查、改变或合并值的特殊符号或短语。例如:加号+将两个数相加。更复杂的运算例子包括逻辑与运算符&&或让i值加1的便捷自增运算符++i等。

Swift支持大部分标准C语言的运算符,且改进许多特性来减少常规编码错误。例如:赋值符不返回值,以防止把想要判断相等运算符的地方写成赋值符导致的错误。算术运算符(+,-,*,/,%等)会检测并不允许值溢出,以此来避免保存变量时由于变量大于或小于其类型所能承载的范围时导致异常。当然允许你使用Swift的溢出运算符来实现溢出。

与C语言不同的是,在Swift中可对浮点数进行取余运算,还提供C语言没有的表达两数之间的值的区间运算符(a..

术语

运算符有一元、二元和三元运算符:

  • 一元运算符对单一目标操作。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作对象之前(如!b),后置运算符需紧跟在操作对象之后(如i++)。
  • 二元运算符操作两个操作对象,出现在两个操作对象之间。如:(a+b)
  • 三元运算符操作三个操作对象,和C语言一样,Swift只有一个三元运算符,就是三目运算符?:。如a ? b : c。

赋值运算符

赋值运算符为=。如下表示将常量cost的值赋值给变量totalMoney

let cost = 100

var totalMoney = cost

元组也可以使用赋值运算符,如下则x的值为1,y的值为2:

let (x, y) = (1, 2)

赋值运算符不返回值,因此不能用于if语句中直接判断:

// error
if (x = y) {
   // 这里只是把y的值赋值给x,但是并不会返回值,因此没有比较,对于if语句就没有返回true或者false
}

算术运算符

Swift为数值类型提供了四个标准的算术运算符:

  • 加法(+)
  • 减少(-)
  • 乘法(*)
  • 除法(/)
1 + 2 // 等于3
5 - 1 // 等于4
2 * 2 // 等于4
10.0 / 2.5 //等于4.0

默认是不允许值溢出的,若溢出则会抛出异常。如果要允许溢出,我们可以使用swift提供的溢出运算符,如&+代表溢出加法。

对于字符串,提供了字符串连接:

// equals "Hello, World"
"Hello, " + "World"

求余运算符

在数学上,求余也叫取模。比如,计算9 % 4:

9 % 4 // 1 <= 9 - (9 / 4) * 4

同样,如果是-9 % 4呢?

-9 % 4 // -1 <= -9 - (-9 / 4) * 4

浮点数求余

在C和Ojbective-C中是不支持浮点数求余的,但是在swift中是支持的。其实浮点数求余与整数求余没有什么特殊的,计算方式是一样的:

8 % 2.5 // 0.5 <= 8 - (8 / 2.5) * 2.5 

自增和自减运算符

和C语言一样,Swift也提供了对变量本身加1或减1的自增(++)和自减(–)运算符。其操作目标可以是整形和浮点型。

var i = 0
var a = i++;

如果执行i++或者++i

  • 当++前置的时候,先自増再返回。a = ++i <=> i = i + 1, a = i
  • 当++后置的时候,先返回再自增。a = i++ <=> a = i, i = i + 1

i--或者--i也是一样:

  • 当–前置时,先自减再返回。a = --i <=> i = i - 1, a = i
  • 当–后置时,先返回再自减。a = i-- <=> a = i, i = i - 1

一元运算符

数值的正负号可以使用前缀-来切换:

let three = 3
let minusThree = -three       // minusThree 等于 -3
let plusThree = -minusThree   // plusThree 等于 3, 或 "负负3"

在值前面添加正号(+)是不做任何事的:

let three = -3
let anotherThree = +three // -3

组合运算符

Swift提供了组合运算符,如:

  • +=
  • *=
  • /=
  • %=

不同的数据类型,其可能已经重载过运算符,计算结果可能不一样。比如Int类型的+=只是简单的数值计算,而字符串的+=则是字符串连接。

比较运算符

Swift支持所有标准C的比较运算符:

  • == 判断是否相等
  • != 判断是否不相等
  • > 是否大于
  • < 是否小于
  • >= 是否大于或者等于
  • <= 是否小于或者等于
  • === 判断两个对象是否是同一个引用,应用于类的实例之间
  • !== 判断两个对象不是同一个引用,应用于类的实例之间
1 == 1   // true, 因为 1 等于 1
2 != 1   // true, 因为 2 不等于 1
2 > 1    // true, 因为 2 大于 1
1 < 2    // true, 因为 1 小于2
1 >= 1   // true, 因为 1 大于等于 1
2 <= 1   // false, 因为 2 并不小于等于 1

比较运算符更多的情况下是应用于if语句:

let name = "world"
if name == "world" {
    print("hello, world")
} else {
    print("I'm sorry \(name), but I don't recognize you")
}
// 输出 "hello, world", 因为 `name` 就是等于 "world"

三目运算符

三目运算符通常应用于单条件判断,比如判断是否为空:

if str.isEmpty {
  return ""
} else {
  return str
}

转换成三目运算:

return str.isEmpty ? "" : str

Nil Coalescing Operator

nil合并运算符在开发中是很常用的,对于可选类型,尝试获取值,若没有值则使用默认值。其语法为:a ?? b,它相当于:

a != nil ? a! : b

比如下面的语法,如果customName为nil,则返回defaultName,否则返回customName:

let defaultName = "标哥的技术博客"
var customName: String?   //默认值为 nil

return customName ?? defaultName

区间运算符

Swift 提供了两个优雅的表达一个区间的值的运算符:

  • a…b,表示[a, b]
  • a..

闭合区间

for index in 1...5 {
    print("\(index) * 5 = \(index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25

左闭右开区间

for index in 1..<5 {
    print("\(index) * 5 = \(index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20

逻辑运算符

逻辑运算的操作目标是逻辑布尔值。Swift支持基于C语言的三个标准逻辑运算。

  • 逻辑非(!)
  • 逻辑与(&&)
  • 逻辑或(||)

逻辑非(!)

逻辑非其实就是取反,true变成false,false变成true。

let isSucessful = false
if !isSucessful {
    print("fail")
}

逻辑与(&&)

逻辑与其实就是当且仅当的意思。只有每个表达式都是true,最终结果才为true,否则结果为false。

if (a && b) {
   print("只有a和b都不为nil才会打印这一句")
}

逻辑或(||)

逻辑或其实就是只要存在的意思。只要存在那么一个表达式的结果为true,那么结果就为true,否则为false:

if a || b {
   print("只要a或者b不为nil,则此句就会打印出来")
} 

逻辑组合

在开发中,往往是多个组合一起的,那么其运算顺序是左结合的,因此从左边开始运算:

if a && b || c || d {

}

但是,在实际开发中,我们要让语意足够清晰,应该这么写:

if (a && b) || c || d {

}

写在最后

本篇博文是笔者在学习Swift 2.1的过程中记录下来的,可能有些翻译不到位,还请指出。另外,所有例子都是笔者练习写的,若有不合理之处,还望指出。

学习一门语言最好的方法不是看万遍书,而是动手操作、动手练习。如果大家喜欢,可以关注哦,尽量2-3天整理一篇Swift 2.1的文章。这里所写的是基础知识,如果您已经是大神,还请绕路!

关注我

如果在使用过程中遇到问题,或者想要与我交流,可加入有问必答QQ群:324400294

关注微信公众号:iOSDevShares

关注新浪微博账号:标哥Jacky

支持并捐助

如果您觉得文章对您很有帮助,希望得到您的支持。您的捐肋将会给予我最大的鼓励,感谢您的支持!

支付宝捐助 微信捐助
时间: 2024-10-27 18:44:17

Basic Operators Of Swift 2.1的相关文章

Swift学习之九:基本运行符(Basic Operators)

基本运行符: +(加法.正数) - (减法.负数) *  (乘法) / (除法) % (求余)  : 在Swift中,求余可以是浮点数求余. &&(逻辑与)  || (逻辑或) ^ (逻辑异或)  表示范围的符号:..和...(两个点:不包括下界和三个点包括下界) ++, -- 赋值操作符 // 赋值操作符=,表示把某个值赋给对应的常量或者变量 let b = 10 var a = 5 如果右边的赋值是一个元组,那么可以分解成多个常量或者变量: // x = 1, y = 2 let (x

Swift教程之基础数据类型详解_Swift

基础类型 虽然Swift是一个为开发iOS和OS X app设计的全新编程语言,但是Swift的很多特性还是跟C和Objective-C相似. Swift也提供了与C和Objective-C类似的基础数据类型,包括整形Int.浮点数Double和Float.布尔类型Bool以及字符串类型String.Swift还提供了两种更强大的基本集合数据类型,Array和Dictionary,更详细的内容可以参考:Collection Types. 跟C语言一样,Swift使用特定的名称来定义和使用变量.同

Swift学习资源

Swift,一种强大的开源编程语言, 让大家都能开发出众的 App. Swift 是一种强劲而直观的编程语言,它由 Apple 创造,可用来为 iOS.Mac.Apple TV 和 Apple Watch 开发 app.它旨在为开发者提供充分的自由.Swift 易用并且开源,只要有想法,谁都可以创造非凡. Swift is a high-performance system programming language. It has a clean and modern syntax, offer

小波说雨燕 第三季 构建 swift UI 之 度假清单 学习笔记

最终的效果: <1>第一个场景: 1.本地化 界面简体中文化 Supporting Files - info.plist Localization native development region 本地的编程的地区 选择China,这样的话,用到系统的UI组件,就会变成中文的样式. 2.文本框占位符 属性:Placeholder 另外需要积累的是:Clear Button Appears while editing :当你输入的时候会出现这个(清除)按钮 3.自动布局 添加文本框顶部,左侧和

给blood的礼物《A Programmers Introduction to Visual Basic.Net》

visual OverviewForeword viiiIntroduction 11 Why Should You Move to Visual Basic.NET? 32 Your First VB.NET Application 213 Major VB.NET Changes 494 Building Classes and Assemblies with VB.NET 735 Inheritance with VB.NET 916 Database Access with VB.NET

【面试必备】Swift&amp;amp;nbsp;面试题及其答案

原文:Swift Interview Questions and Answers 原作者:Antonio Bello 原作者介绍: Antonio 拥有丰富的编程经验.他开始编程的时候,内存单位还是 byte 而不是 gigabyte,存储空间还是可选的附加物,最常用的语言还是BASIC.现在,Antonio 的兴趣在于 iOS 应用开发.node.js 后端开发,而且他从来不会放过学习新东西的机会.他认为 Swift 是一门很有表现力的语言,不过 Objective-C 仍然是伟大而不同寻常的

从 Objective-C 到 Swift —— Swift 糖果 【已翻译100%】

Swift带来很多确实很棒的特性,使得很难再回到Objective-C.主要的特性是安全性,不过这也被看成是一种额外副作用. 带类型接口的强型别 Swift有强型别,这意味着除非你要求,不然Swift不会为你做类型之间的转换.所以,例如你无法把Int型赋给Double型.你不得不首先转换类型: let i: Int = 42 let d: Double = Double(i) 或者你必须给Double类扩展一个方法用来转换Int型: extension Double { func __conve

OpenGL ES From the Ground Up, Part 1: Basic Concepts

FRIDAY, APRIL 17, 2009 OpenGL ES From the Ground Up, Part 1: Basic Concepts I've done a number of postings on programming OpenGL ES for the iPhone, but most of the posts I've done have been targeted at people who already know at least a little bit ab

从Swift编程语言略谈开源

至少到目前为止,作为世界上商业最成功的公司之一,苹果似乎本应与开源扯不上什么关系.然而今天早间传来消息,苹果一如其半年前承诺的那样,正式开源去年推出的全新编程语言Swift. 我已经很久没有关注编程语言了.自从离开学校,在第一家服务的单位里曾短暂用C语言做过一些简单的应用开发后,那个代码世界终归与我绝缘了,我变身成为一个媒体人. 我最早在中学使用过BASIC,不过进入大学后学习的第一种编程语言却是Fortran,在法国BULL公司的小型机上.学习的目的,是为了科学和工程计算--其实我一次也没用上