Swift2.1 语法指南——基本运算符

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID60

1、赋值

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

与C语言和Objective-C不同, Swift的赋值操作并不返回任何值. 所以以下代码是错误的:

1 if x = y {
2     // this is not valid, because x = y does not return a value
3 }

这个特性使得你无法把==错写成=, 由于if x = y是错误代码, Swift从底层帮你避免了这些代码错误.

2、算术运算符

1 1 + 2       // equals 3
2 5 - 3       // equals 2
3 2 * 3       // equals 6
4 10.0 / 2.5  // equals 4.0

与C语言和Objective-C不同的是, Swift默认不允许在数值运算中出现溢出情况. 但你可以使用Swift的溢出运算符来达到你有目的的溢出, (如 a &+ b ).

加法操作 + 也用于字符串的拼接:

"hello, " + "world"  // equals "hello, world"

3、取余运算符

1 9 % 4   // equals 1
2 -9 % 4   // equals -1

求余时, b的符号会被忽略。这意味着 a % b 和 a % -b的结果是相同的.

浮点求余:

1 8 % 2.5   // equals 0.5

4、自增/自减运算符

i++、i--、++i、--i

与C语言中的运算符特性相同。

除非你需要使用 i++ 的特性, 不然推荐你使用 ++i 和 --i, 因为先修改后返回这样的行为更符合我们的逻辑.

5、单目负号

1 let three = 3
2 let minusThree = -three       // minusThree equals -3
3 let plusThree = -minusThree   // plusThree equals 3, or "minus minus three"

单目负号写在操作数之前, 中间没有空格.

6、单目正号

当你在使用单目负号来表达负数时, 你可以使用单目正号来表达正数, 如此你的代码会具有对称美.

7、复合赋值

同C语言。

1 var a = 1
2 a += 2
3 // a is now equal to 3

8、比较运算符

1 == 1   // true, because 1 is equal to 1
2 != 1   // true, because 2 is not equal to 1
2 > 1    // true, because 2 is greater than 1
1 < 2    // true, because 1 is less than 2
1 >= 1   // true, because 1 is greater than or equal to 1
2 <= 1   // false, because 2 is not less than or equal to 1

9、三目条件运算符

1 let contentHeight = 40
2 let hasHeader = true
3 let rowHeight = contentHeight + (hasHeader ? 50 : 20)
4 // rowHeight is equal to 90

相当于以下代码:

1 let contentHeight = 40
2 let hasHeader = true
3 var rowHeight = contentHeight
4 if hasHeader {
5     rowHeight = rowHeight + 50
6 } else {
7     rowHeight = rowHeight + 20
8 }
9 // rowHeight is equal to 90

三目条件运算提供有效便捷的方式来表达二选一的选择. 需要注意的是, 过度使用三目条件运算就会由简洁的代码变成难懂的代码. 我们应避免在一个组合语句使用多个三目条件运算符.

10、Nil合并运算符

1 a ?? b

如果可选值a有值,则将其解包。反之,如果a等于nil,则返回默认值b。其中,a总是一个可选型的值,b则是一个与a解包的值类型一致的值。

上面的表达式可以看做下列表达式的缩写版:

1 a != nil ? a! : b

下面的例子,用nil合并运算符来作默认颜色和用户自定义颜色之间的选择。

如果提供的自定义颜色名为空,则返回默认颜色。

1 let defaultColorName = "red"
2 var userDefinedColorName: String?   // defaults to nil
3
4 var colorNameToUse = userDefinedColorName ?? defaultColorName
5 // 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"

11、区间运算符

(1)闭区间运算符

a...b 声明了一个包含a和b的值的闭区间。a必须不大于b。

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

(2)半开区间运算符

a..<b 声明了一个包含a但不包含b的半开半闭区间。a的值必须不大于b。如果a等于b,则该区间为空。

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

12、逻辑运算符

(1)逻辑非

1 let allowedEntry = false
2 if !allowedEntry {
3     print("ACCESS DENIED")
4 }
5 // prints "ACCESS DENIED"

(2)逻辑与

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"

(3)逻辑或

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!"

(4)组合逻辑

1 if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
2     print("Welcome!")
3 } else {
4     print("ACCESS DENIED")
5 }
6 // prints "Welcome!"

(5)显式括号增加可读性

1 if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
2     print("Welcome!")
3 } else {
4     print("ACCESS DENIED")
5 }
6 // prints "Welcome!"
时间: 2024-10-11 00:10:34

Swift2.1 语法指南——基本运算符的相关文章

Swift2.1 语法指南——属性

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254 1.属性 属性将值跟特定的类.结构或枚举关联.存储属性存储变量或常量的值,作为实例的一部分,而计算属性则计算一个值.计算属性用于类.结构体和枚举.而存储属性只用

Swift2.1 语法指南——闭包

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94 1.闭包(Closures) 闭包是独立的函数代码块,可以在代码中被传递和使用.Swift中的闭包与C语言和Objective-C语言中的block.其他语言中的la

Swift2.1 语法指南——枚举

原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html#//apple_ref/doc/uid/TP40014097-CH12-ID145 枚举定义了一个普通类型的一组相关值,使你可以在代码中以一种安全的方式来使用这些值. 如果你熟悉 C 语言,你就会知道,在 C 语言中枚举将枚举名和一个整型

Swift2.1 语法指南——协议

原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID267 参考:http://wiki.jikexueyuan.com/project/swift/chapter2/22_Protocols.html 1.协议 协议定

Swift2.1 语法指南——函数

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158 函数是完成指定任务的独立代码块. Swift中的函数都有对应的类型,由参数类型和返回值类型共同组成.你可以向使用其他类型一样来使用函数类型,因此,可以将函数作为函

Swift2.1 语法指南——访问控制

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html#//apple_ref/doc/uid/TP40014097-CH41-ID3 参考:http://wiki.jikexueyuan.com/project/swift/chapter2/24_Access_Control.html 1.

Swift2.1 语法指南——泛型

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html#//apple_ref/doc/uid/TP40014097-CH26-ID179 参考:http://wiki.jikexueyuan.com/project/swift/chapter2/23_Generics.html 1.泛型 泛型代码可以

Swift2.1 语法指南——基础

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309 一.常量与变量 1.声明 1 let maximumNumberOfLoginAttempts = 10 2 var currentLoginAttempt = 0

Swift2.1 语法指南——类型转换

原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID338 参考:http://wiki.jikexueyuan.com/project/swift/chapter2/19_Type_Casting.html 1.类型