Swift支持大部分标准C语言的运算符,并且对许多特性进行改进来减少常规编码的错误。除了支持基本运算符外,Swift还提供了2个特殊的运算符,分别是:溢出运算符和区间运算符

首先看下基本运算符

import UIKit

var str = "Hello, playground"

/**
赋值运算符
1. 注意⚠️:与C语言和OC不同,Swift的赋值操作并不返回任何值。
这个特性是你无法把(==)错写成 (=)
*/
let b =
var a = b
//if a = b {
// // c这样写错误,因为 a = b 并不返回任何值
//} /**
算术运算符
1.Swift中所有数值类型都支持基本的四则算术运算符
2.注意⚠️:swift默认情况下不允许在数值计算中出现溢出情况。可以使用溢出运算符实现溢出计算
3.加法运算符 也可用于 String的拼接
*/
print( + )
print( - )
print( * )
print(27.0 / 3.0)
print("hello, " + "world") // "hello, world" /**
求余运算符
1. a % b 求余运算符 % 在有的语言中也叫 取模运算符
2. 在对负数b求余时,b的符号会被忽略。这意味着 a % b 和 a % -b的结果相同
*/
print( % )// 等于1
print(- % )// 等于-1
print( % -)// 等于1 /**
一元负号运算符
*/
let four =
let tempFour = -four /**
一元正号运算符
该运算符 不做任何改变地返回操作数的值
*/
let mSix = -
let alsoMsix = +mSix// 等于 -6 /**
组合运算符
将其它运算符和赋值运算符(=)组合的f组合运算符
注意⚠️:复合赋值运算符没有返回值 let m = n += 4 这类代码是错误
*/
var n =
n +=
print(n) //let m = n += 5
//print(m)// 结果是 () /**
比较运算符
1. 所有标准C语言中的比较运算符都可以在Swift中使用
2. 每个比较运算符返回了一个标识表达式是否成立的布尔值
3. swift提供了恒等(===)和不恒等(!==)这两个比较符来判断两个对象是否
引用同一个对象实例
4. 元组比较:如果两个元组的元素相同,且长度相同的话,元组就可以被比较
比较元组大小会按照从左到右、逐值比较的方式,知道发现两个值不等时停止
如果所有的值都相等,那么这一对元组就相等
注意⚠️:swift标准库只能b比较7个以内元素的元组比较
*/
print( != )// true
print((, "dog") < (, "banner"))// true 因为1小于3,所以整个元组就是小于的,不管元组剩下的值如何
print((, "dog") < (, "banner"))// false 当异地个元素相同的时候,第二个元素就会用做比较 /**
三目运算符
*/
let contentHeight =
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? : ) /**
空合运算符
a ?? b 将对可选类型a进行空判断,如果a包含一个值就进行解封,否则返回一个默认值b
注意⚠️:表达式a必须是可选类型。默认值b的类型必须和a类型一致
*/
let defaultColorName = "red"
var userDefinedColorName: String?// 默认值为nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
print(colorNameToUse)
userDefinedColorName = "blue"
colorNameToUse = userDefinedColorName ?? defaultColorName
print(colorNameToUse) /**
逻辑运算符
逻辑运算符的操作对象是逻辑布尔值。
逻辑非 (!a)
逻辑与(a && b)
逻辑或(a || b)
*/
let allowedEntry = false
if !allowedEntry {
print("ACCESS DENIED")
} let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
} let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}

区间运算符

/**
1. 闭区间运算符
(a...b)定义一个包含从a到b的所有值的区间,a值不能超过b
*/
for index in ... {
print(index)// 1 2 3 4 5 6
}
/**
2. 半开区间运算符
(a..<b)定义一个包含从a到b但不包括b的区间
*/
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in ..<count {
print("第 \(i + 1) 个人叫 \(names[i])")
}
/**
3. 单侧区间
可以表达往一侧无限延伸的区间
*/
for name in names[...] {
print(name)// Brian Jack
}

溢出运算符

//溢出运算符
var am = UInt8.max //am = 255
//Error: -> var b:UInt8 = am + 1 //注意b会出现溢出,此句报错
//下面使用溢出运算符,结果为:0
var bm:UInt8 = UInt8(a &+ )
//类似的还有&-、&*、&/,使用溢出运算符可以在最大值和最小值之前循环而不会报错,下面c的值为255
var c:UInt8 = UInt8(bm &- )

最新文章

  1. MySql 及 MySql WorkBench使用大全
  2. LINQ之路 6:延迟执行(Deferred Execution)
  3. SpringMVC中的设计模式
  4. vim常用指令及快捷键(持续更新)
  5. 希尔排序( Shell Sort)
  6. Centos安装wine等组件的问题
  7. 转载:执行脚本出现bin/bash: bad interpreter: No such file or directory
  8. Weblogic的Admin server进程将CPU消耗尽问题解决
  9. java调用Command命令
  10. asp.net 向后台提交 html 代码段 包括 &lt;&gt; 标签
  11. Fatal error: Call to undefined function oci_connect()
  12. mysql分页的问题
  13. linkin大话设计模式--桥接模式
  14. 关于linux下ntp时间同步服务的安装与配置
  15. react购物车
  16. Django的认证系统—auth模块
  17. python学习之思维导图
  18. leecode第七题(整数反转)
  19. 生活类App原型制作分享-AnyList
  20. BT1120时序,可以用于自测用

热门文章

  1. 美团DSP
  2. mssql表分区
  3. Telnet设置
  4. Linux系统格式化命令mke2fs命令简析
  5. 【MFC】BitBlt详解
  6. FastAdmin-T
  7. Linux批量文件管理
  8. KVM虚拟化网络管理(4)
  9. 介绍 5 个实用的 Ajax 库
  10. Emgu 学习之HelloWorld