Swift(三)基本运算符
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 &- )
Swift(三)基本运算符的更多相关文章
- swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)
swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...
- 李洪强iOS开发Swift篇—04_运算符
李洪强iOS开发Swift篇—04_运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运 ...
- C#流程控制语句--分支语句(if,switch,三位运算符)
分支语句:判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). 分支语句 if if(判断条件表达式) {//表达式结果为tu ...
- ES6---扩展运算符和rest‘...’(三点运算符),在数组、函数、set/map等中的应用
ES6新增的三点运算符,是由三个点表示,在数组中扮演着重要的角色,可以对数组进行合并与分解.可以对set等数据结构进行转换.可以对函数参数进行简化表示,接下来,我们一起揭开其神秘面纱… ●三点—res ...
- ES6_05_三点运算符和形参默认值
三点运算符的用途: # 1. rest(可变)参数 * 用来取代arguments 但比 arguments 灵活,只能是最后部分形参参数 function fun(...values) { cons ...
- Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)
0.看文档呀 关于拓展运算符更详细的解释见 > MDN展开语法 关于剩余参数更详细的解释见 >MDN剩余参数 关于解构赋值更详细的解释见 >MDN解构赋值 直接看上面的文档更好 1. ...
- ES6(模板字符串,三点运算符,Symbol,iterator接口)
模板字符串 作用:简化字符串的拼接 模板字符串必须用``包含 变化的部分使用${xxx}包含 对象的简写方式 同名的属性可以省略不写 可以省略函数的function 箭头函数 箭头函数的特点 箭头函数 ...
- swift笔记(二) —— 运算符
基本运算符 Swift支持大部分的标准C语言的操作符,而且做了一些改进,以帮助开发人员少犯低级错误,比方: 本该使用==的时候,少写了个=, if x == y {-} 写成了 if x = y {- ...
- Swift教程之运算符重载
http://blog.csdn.net/mengxiangyue/article/details/43437797 原文地址:http://www.raywenderlich.com/80818/o ...
随机推荐
- electron关于页面跳转 的问题
刚开始看到页面跳转,大家一般会想到用 window.location.href = './index.html'; 这样的代码.结果是可以跳转,但 DOM事件 基本都会失效.到最后还是使用的 elec ...
- 按下home键,重新打开,应用重启
其实不是重启,只是重新打开了luncher的那个activity.只要通过判断把它finish,就会显示按下home键前的页面. 解决方法: 在重启的页面中加入一下代码,注意加在setContentV ...
- 软件-效率:Microsoft To Do
ylbtech-软件-效率:Microsoft To Do Microsoft To Do To Do 让你从工作到娱乐都保持专注. 1.返回顶部 1. 智能每日计划 使用“我的一天”,用智能个性化建 ...
- 七十三:flask信号之信号机制和使用场景
若安装flask是未默认安装blinker,则pip install blinker 使用信号分为3步,第一是定义一个信号,第二是监听一个信号,第三是发送一个信号 1.定义信号:定义信号需要使用到bl ...
- ABAP Field+offset字符串截取
*删除字符串末尾的字符 DATA:str TYPE string VALUE 'abc,defg,', sub_str TYPE string, num TYPE i. WRITE:/ str. nu ...
- Appium-实战之启动App 获取信息说明
如下为启动 格来云游戏APP启动信息 代码如下: from appium import webdriver caps = {} caps["platformName"] = &qu ...
- 【HANA系列】【第六篇】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第六篇]SAP HANA XS ...
- 【Python开发】Url中文字符时记得转码edcode("utf-8")
在url中使用中文其实是一个坏习惯,会带来一系列的转码问题, 我更喜欢英文译名或者id来标识某个uri.但是现实往往是残酷的, 特别是在我们调用别人服务时候,有时候被逼无奈使用中文URL. Pytho ...
- vue--vue-resource实现 get, post, jsonp请求
vue-resource 实现 get, post, jsonp请求 除了 vue-resource 之外,还可以使用 axios 的第三方包实现实现数据的请求 之前的学习中,如何发起数据请求? 常见 ...
- springBoot中tomcat默认端口修改
springboot在启动tomcat的默认端口是8080,在实际开发中,应客户要求必须使用80端口. 研究springboot后发现有两种方式可以实现修改tomcat的端口 第一.直接修改appli ...