当前位置: 代码迷 >> 综合 >> Day07:运算符
  详细解决方案

Day07:运算符

热度:62   发布时间:2023-09-29 19:15:13.0
  • 基本概念 ???????
  1. 一元运算符对一个目标进行操作。一元前缀运算符(如!b),一元后缀运算符(b!)。
  2. 二元运算符对两个目标进行操作(比如a+b)同时因为他们出现在两个目标之间,所以是中缀。
  3. 三元运算符操作是三个目标。swift语言也仅有一个三元运算符,三元条件运算符(a?b:c)。
  • Swift 运算符的改进
  1. swift在支持c的大多数标准运算的同时也增加了一些排除常见代码错误的能力。
  2. 赋值运算号(=)不会返回值,以防它被误用于等于符号(==)的意图上。
  3. 算数符号(+,-,*,/,%以及其他)可以检测并阻止值溢出,以避免你在操作比存储类型允许的范围更大或者更小的数字时得到各种奇奇怪怪的结果。
  • 赋值运算符
  1. 赋值运算符将一个值赋给另外一个值。
  2. 如果赋值符号右侧拥有多个值的元组,他的元素也将会一次性地拆分成常量或者变量。
  3. swift的赋值符号自身不会返回值。
  • 算术运算符-标准运算符
  1. 标注算术运算符+-*/
  2. 加法运算符同时也支持string的拼接
  3. swift算术运算符默认不允许溢出
  • 算术运算符-余数运算符 
  1. 余数运算符(a%b)可以求出多少个b的倍数能够刚好放进a中并且返回剩余的值(就是我们所谓的余数)。
  2. 当a是负数时也使用相同的方法来计算。
  3. 当b为负数是它的正负号被忽略掉了。这意味着a%b 与a%-b能够获得相同的答案。
  • 算术运算符-一元
  1. 数字值的正负号可以用前缀来切换,我们称之为一元减号运算符。
  2. 一元减号运算符(-)直接在要进行操作的值前边放置,不加任何空格。
  3. 一元加号元算符(+)直接返回它操作的值,不会对其进行任何的修改。
  • 【代码演示】
import UIKitvar a = 1
var b = 0/**if a = b { //错误做法print("do something")}*/if a == b {
print("do something")
}let c = 9 % 4
print(c)// 结果:1let d = 9 % -4
print(d)// 结果:1let e = -9 % 4
print(e)// 结果:-1
  • 溢出运算符
  1. 在默认情况下,当向一个整数赋超过他的容量的值时,swift 会报错而不是生成一个无效的数,给我们操作过大或者过小的数提供来额外的安全性。
  2. 同事说提供三个算数溢出运算符来让系统支持整数溢出运算:溢出加法(&+) 溢出减发(&-) 溢出乘法(&*)。
  • 值溢出
  1. 溢出也会发生在有符号整型数值上。
  2. 对于无符号与有符号整型数值来说,当出现上溢时,它们会从数值所能容纳的最大数变成最小数。同样的当发生下溢时,他们会从所能容纳的最小数变成最大数。
  • 【代码演示】
let num1:UInt8 = 0
let num2 = num1 &- 1
print(num2)// 结果:255let num3:UInt8 = 250
let num4 = num3 &+ 10
print(num2)// 结果:4let num5:Int8 = -128
let num6 = num5 &- 1
print(num6)// 结果:127
  • 合并空值运算符
  1. 合并空值运算符(a??b)如果可选项a有值这展开,如果没有值,是nil则返回默认值b。
  2. 表达式a必须是一个可选类型。表达式b必须与a的存储类型相同。
  3. 实际上是三元运算符作用到Optional上的缩写(a !=nil ? a! : b)。
  4. 如果a的值是非空,b的值将不会被考虑,也就是合并空值运算符是短路的。
  • 【代码演示】
  • 
    let f:Int? = 3
    let g = 4print(f ?? g) // 结果:3let h:Int? = nil
    let j = 4
    print(h ?? j) // 结果:4

  • 区间运算符
  1. 闭区间运算符(a...b) 定义了从a到b的一组范围,并且包含a和b。a的值不能大于b。
  2. 半开区间运算符(a..<b)定义了从a到b但不包括b的区间。
  3. 如同闭区间运算符,a的值也不能大于b,如果a与b相等,那返回的区间将是空的。
  4. 单侧区间 闭区间有另外一种形式让区间朝一个方向尽可能的元,这种区间叫做单侧区间。
  5. 半开区间运算符同样可以单侧形式,只需要写它最终值。
  6. 例如:一个包含数组所有元素的区间,从索引2到数组的结束。在这种情况下,你可以省略区间运算一侧的值。
  7. 单侧区间可以在其他上下文中使用,不仅仅是下标。
  8. 单侧区间不能遍历省略了第一个值的单侧区间,因为遍历根本不知道从哪开始。你可以遍历省略了最终值的单侧区间。
  9. 字符串范围也可以使用区间运算符。
  10. 可以通过reversed()方法,将一个正序循环变成逆序循环。
  11. 区间运算符可以作用在comparable类型上,返回闭区间和半闭区间。

import UIKitvar greeting = "Hello, playground"//1、闭区间let rang = 0...10for index in rang{
print(index) //结果:012345678910
}//2、半开半闭区间
let rangA = 0..<10for index in rangA{
print(index) //结果:0123456789
}//3、单侧区间let names = ["BeiJing","ShangHaei","XiAn","WuHan"]
for item in names[...2]{
print(item)//结果:BeiJing ShangHaei XiAn WuHan
}for item in names[2...]{
print(item)//结果: XiAn WuHan
}for item in names[..<2]{
print(item)//结果:BeiJing ShangHaei
}//4、字符串的索引var weclome = "hellow world"
let rangString = weclome.startIndex...weclome.index(weclome.endIndex, offsetBy: -6)
weclome.removeSubrange(rangString)
print(weclome)//结果:world//5、comparablevar starValue = "Hellow,world"
let rangeB = "a"..."z"
for c in starValue {if !rangeB.contains(String(c)){print("\(c)不是小写字符")//结果:H不是小写字符 ,不是小写字符}
}//6、倒叙
for index in (0...10).reversed(){
print(index)//结果:10 9 8 7 6 5 4 3 2 1
}