查看: 3596|回复: 0

[手机开发] 快看Sample代码,速学Swift语言(3)-运算符

发表于 2018-2-21 08:00:04

运算符是用来检查,更改或组合值的特殊符号或短语。Swift提供的很多常规的运算符,如+、-、*、/、%、=、==等,以及逻辑运算的&&、||等等,基本上不需要重复介绍,我们在这里只需要了解一些不太一样的运算符就可以了。如Swift引入的新运算符,范围操作符号,包括..<和...两个,该随笔介绍Swift常规的运算符中,以及和其他语言有所差异的部分。

赋值运算符
  1. let b = 10
  2. var a = 5
  3. a = b
  4. // a is now equal to 10
复制代码

赋值语句,处理和其他语言一样。

  1. let (x, y) = (1, 2)
  2. // x is equal to 1, and y is equal to 2
复制代码

这种代码是类似ECMAScript 6的脚本写法,通过把右边元祖对象解构赋值给左边对应的参数。

数学运算符
  1. 1 + 2 // equals 3
  2. 5 - 3 // equals 2
  3. 2 * 3 // equals 6
  4. 10.0 / 2.5 // equals 4.0
复制代码

这些都是和其他语言没有什么不同,循例列出参考下

对于字符,也可以使用+符号进行连接新的字符串

  1. "hello, " + "world" // equals "hello, world"
复制代码

一元操作符中的-、+运算,和算术里面的负负得正,正负得负的意思一样了。

  1. let three = 3
  2. let minusThree = -three // minusThree equals -3
  3. let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
复制代码

  1. let minusSix = -6
  2. let alsoMinusSix = +minusSix // alsoMinusSix equals -6
复制代码

组合运算符提供+= 、-=的运算符操作

  1. var a = 1
  2. a += 2
  3. // a is now equal to 3
复制代码

对比运算符和其他语言差不多

  • 等于 (a == b)

  • 不等于 (a != b)

  • 大于 (a > b)

  • 小于 (a < b)

  • 大于等于 (a >= b)

  • 小于等于 (a <= b)

另外值得注意的是,Swift提供了对比引用的两个操作符号,=== 和 !==,用来检查两个引用是否完全相等;或者不相等的。而==只是用来对比两个对象的值是否一致。

  1. 1 == 1 // true because 1 is equal to 1
  2. 2 != 1 // true because 2 is not equal to 1
  3. 2 > 1 // true because 2 is greater than 1
  4. 1 < 2 // true because 1 is less than 2
  5. 1 >= 1 // true because 1 is greater than or equal to 1
  6. 2 <= 1 // false because 2 is not less than or equal to 1
复制代码

对比运算符也经常用来If条件语句里面

  1. let name = "world"
  2. if name == "world" {
  3. print("hello, world")
  4. } else {
  5. print("I'm sorry \(name), but I don't recognize you")
  6. }
  7. // Prints "hello, world", because name is indeed equal to "world".
复制代码

三元运算符

三元运算符 ? :和C#里面表现是一样的

  1. question ? answer1 : answer2
复制代码

  1. let contentHeight = 40
  2. let hasHeader = true
  3. let rowHeight = contentHeight + (hasHeader ? 50 : 20)
复制代码

空值转换操作符

空值转换符是对可空类型(可选类型)的一个值得转换出来(a ?? b)。

  1. let defaultColorName = "red"
  2. var userDefinedColorName: String? // defaults to nil
  3. var colorNameToUse = userDefinedColorName ?? defaultColorName
  4. // userDefinedColorName is nil, so colorNameToUse is set to the default of "red"
复制代码

  1. userDefinedColorName = "green"
  2. colorNameToUse = userDefinedColorName ?? defaultColorName
  3. // userDefinedColorName is not nil, so colorNameToUse is set to "green"
复制代码

范围操作符

闭合范围运算符 ... 和半闭合范围运算符 ..< 两个

  1. for index in 1...5 {
  2. print("\(index) times 5 is \(index * 5)")
  3. }
  4. // 1 times 5 is 5
  5. // 2 times 5 is 10
  6. // 3 times 5 is 15
  7. // 4 times 5 is 20
  8. // 5 times 5 is 25
复制代码

半闭合的范围运算符

  1. let names = ["Anna", "Alex", "Brian", "Jack"]
  2. let count = names.count
  3. for i in 0..<count {
  4. print("Person \(i + 1) is called \(names[i])")
  5. }
  6. // Person 1 is called Anna
  7. // Person 2 is called Alex
  8. // Person 3 is called Brian
  9. // Person 4 is called Jack
复制代码

或者如下使用

  1. for name in names[..<2] {
  2. print(name)
  3. }
  4. // Anna
  5. // Alex
复制代码

以及一侧范围的运算符,包括左侧和右侧两个部分

  1. for name in names[2...] {
  2. print(name)
  3. }
  4. // Brian
  5. // Jack
  6. for name in names[...2] {
  7. print(name)
  8. }
  9. // Anna
  10. // Alex
  11. // Brian
复制代码

  1. let range = ...5
  2. range.contains(7) // false
  3. range.contains(4) // true
  4. range.contains(-1) // true
复制代码

逻辑运算符
  1. let allowedEntry = false
  2. if !allowedEntry {
  3. print("ACCESS DENIED")
  4. }
  5. // Prints "ACCESS DENIED"
复制代码

  1. let enteredDoorCode = true
  2. let passedRetinaScan = false
  3. if enteredDoorCode && passedRetinaScan {
  4. print("Welcome!")
  5. } else {
  6. print("ACCESS DENIED")
  7. }
  8. // Prints "ACCESS DENIED"
复制代码

  1. let hasDoorKey = false
  2. let knowsOverridePassword = true
  3. if hasDoorKey || knowsOverridePassword {
  4. print("Welcome!")
  5. } else {
  6. print("ACCESS DENIED")
  7. }
  8. // Prints "Welcome!"
复制代码

  1. if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
  2. print("Welcome!")
  3. } else {
  4. print("ACCESS DENIED")
  5. }
  6. // Prints "Welcome!"
复制代码

或者使用括号使之更加方便阅读

  1. if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
  2. print("Welcome!")
  3. } else {
  4. print("ACCESS DENIED")
  5. }
  6. // Prints "Welcome!"
复制代码



回复

使用道具 举报