经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Swift » 查看文章
快看Sample代码,速学Swift语言(3)-运算符
来源:cnblogs  作者:伍华聪  时间:2018/9/25 20:29:46  对本文有异议

运算符是用来检查,更改或组合值的特殊符号或短语。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!"

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号