您的当前位置:首页正文

Swift基本运算符_2

来源:要发发知识网

术语

运算符分为一元,二元,三元运算符

  • 一元运算符对单一操作对象进行操作(如-a),一元运算符又分前置前置运算符和后置运算符,前置运算符紧跟操作对象之前(如!b),后置运算符紧跟操作运算符之后(如c!)
  • 二元运算符操作两个对象(如2+3),是中置的,放在两个操作对象中间
  • 三元运算符,和c语言一样,swift只有一种三元运算符,就是三目运算符(a?b:c)

受运算符影响的较操作数,在表达式1+2中,+就是运算符,12就是操作数

赋值运算符

赋值运算符a=b,表示用b的值来初始化或者更新a
a=b不返回任何值

算术运算符

swift中所有的数值类型都支持来基本的四则算术运算符

  • 加法(+)
  • 减法(-)
  • 乘法(*)
  • 除法(/)

加法运算符可以拼接字符串

var addStr = "i am" + "Edison"

求余运算符

求余运算符(a%b)是计算 b的多少倍刚好可以容下a,返回多出来的那部分(余数)

注意:
求余运算符(%)在其他语言也叫取模运算符。但是严格说来,我们看该运算符对负数的操作结果,「求余」比「取模」更合适些

9 % 4    // 等于 1

为了得到a % b的结果,% 计算了以下等式,并输出余数作为结果:

a = (b × 倍数) + 余数

在对负数 b 求余时,b 的符号会被忽略。这意味着 a % ba % -b 的结果是相同的

组合赋值运算符

跟c语言一样,Swift 也提供把其他运算符和赋值运算(=)组合的组合赋值运算符,组合加运算(+=)(-=) 等等

复合赋值运算没有返回值,所以let b = a+=5是错误的

比较运算符

原标准的c语言中的比较运算符都可以在swift中使用

  • 等于 ==
  • 不等于 !=
  • 大于 >
  • 小于 <
  • 大于等于 >=
  • 小于等于 <=

每个比较运算都返回了一个标识表达式是否成立的布尔值

比较运算多用于条件语句,如if条件

空合运算符

空合运算符(a ?? b) 将对可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b,表达式a必须是optional类型,默认值b的类型必须要对a储存值的类型保持一致

空合运算符是对一下代码的简短表达方式

a  !=  nil ? a! : b

上述代码使用了三目运算符。当可选类型a的值不为空时,进行强制解封(a!),访问 a 中的值;反之返回默认值 b。无疑空合运算符(??)提供了一种更为优雅的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性

区间运算符

闭区间运算符

闭区间运算符(a...b) 定义了一个包含 从ab(包括ab)的所有值的区间,a的值不能超过b的值,闭区间运算符在迭代一个区间的所有值时是非常有用的,如在 for-in 循环中:

for index in 1...6 {
    
    print(index)
}

上面的例子中,index 是一个每次循环遍历开始时被自动赋值的常量。这种情况下,index在使用前不需要声明,只需要将它包含在循环的声明中,就可以对其进行隐式声明,而无需使用let 关键字声明。

如果你不需要区间序列内每一项的值,你可以使用下划线(_)替代变量名来忽略这个值:

let base = 3
let power = 10
var answer = 1
for _ in 1...power {
    answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// 输出 "3 to the power of 10 is 59049"
半开区间运算符

半开区间运算符(a..<b)定义一个从ab但不包括b�的区间
之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。
半开区间的实用性在于当你使用一个从 0 开始的列表(如数组)时,非常方便地从0数到列表的长度

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
    print("第 \(i + 1) 个人叫 \(names[i])")
}
// 第 1 个人叫 Anna
// 第 2 个人叫 Alex
// 第 3 个人叫 Brian
// 第 4 个人叫 Jack

单侧区间

闭区间操作符有另一个表达形式,可以表达往一侧无限延伸的区间 —— 例如,一个包含了数组从索引 2 到结尾的所有值的区间。在这些情况下,你可以省略掉区间操作符一侧的值。这种区间叫做单侧区间,因为操作符只有一侧有值

let names = ["Anna", "Alex", "Brian", "Jack","Fucy","Nacy","Lugy"]
let count = names.count
for j in [...4] {

    print(names[j])
}
/*
["Anna", "Alex", "Brian", "Jack", "Fucy"]
*/
let names = ["Anna", "Alex", "Brian", "Jack","Fucy","Nacy","Lugy"]
let count = names.count
for j in [1...] {

    print(names[j])
}
/*
["Alex", "Brian", "Jack", "Fucy", "Nacy", "Lugy"]
*/

半开区间操作符也有单侧表示形式
[..<2] [..<2]

逻辑运算符

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