Swift基础入门知识学习(3)-基本数据类型(型別)-讲给你懂
TED演讲的8个秘诀:学习18分钟高效表达-重点笔记-CSDN下载
目录
运算符是一个符号,用于告诉编译器执行一个数学或逻辑运算。
Swift 提供了以下几种运算符:
- 指派运算符
- 数值运算符
- 复合指派运算符
- 比较运算符
- 三元运算符
- 空值聚合运算符
- 区间运算符
- 逻辑运算符
- 括号优先
运算符(operator)是检查、改变、合并值的特殊符号或语句。像是加号 + 就是将两个数相加 (let number = 1 + 2)。
指派运算符
理解难度
★☆☆☆☆
实用程度
★★★★★
这里的 = ,不是数学的等于;a = b表示将右边的b指派给左边的a,如下:
let b = 10
var a = 5
// 将 b 指派给左边的 a
a = b
想想看,现在 a 是多少呢?
可以打印结果看看。
// 你也可以直接指派元组,会直接分解为多个常数或变数
let (x, y) = (1, 2)
// 现在 x 为 1, y 为 2
数值运算符
理解难度
★☆☆☆☆
实用程度
★★★★★
Swift 中所有数值型别都支援基本的四则运算,加 +、减 -、乘 *、除 / 。这就跟一般的数学运算是一样的作用了。
var c = 3 + 2
// c 等于 5
var d = 7 - 2
// d 等于 5
var e = 3 * 2
// e 等于 6
var f = 10.0 / 2.5
// f 等于 4.0
加法运算符也可以用于字串的合并:
let 第一句 = "Hello, "
let 第二句 = "world."
let 最后结果 = 第一句 + 第二句
// 印出:Hello, world.
print(最后结果)
取余数运算
理解难度
★★☆☆☆
实用程度
★☆☆☆☆
取余数运算( a % b )是计算b的多少倍刚刚好可以容入a,返回多出来的那部分,就是取余数。就是剩下除不尽的数。
var oneNumber = 9 % 4
print(oneNumber) // 取余数等于 1
Swift 中是可以对浮点数进行取余数的。
8 % 2.5 // 等于 0.5
这个例子中,8除于2.5等于3余0.5,所以结果是一个Double值0.5。
一元负号
理解难度
★☆☆☆☆
实用程度
★☆☆☆☆
数值的正负号可以使用前缀 -(即一元负号)来切换:
let number1 = 3
var anotherNumber1 = -number1 // 为 -3
var finalNumber1 = -anotherNumber1 // 为 3
-anotherNumber1 就是因两个复数,所以就是负负得正了。
一元正号
理解难度
★☆☆☆☆
实用程度
★☆☆☆☆
一元正号 + 则是不做任何改变地回传数值。
既然没什么作用...直接可以省略掉了。
let number2 = -6
var anotherNumber2 = +number2 // 为 -6
复合指派运算符
理解难度
★★★☆☆
实用程度
★★★☆☆
Swift 提供一个简洁的方式,将数值运算与指派运算合并,像是+=,很多时候可以简化程式,如下:
var n = 10
n += 2 // 这行等同于 n = n + 2 的简写
print(n) // 现在 n 等于 12
// 其他数值运算符也是一样
n -= 4 // n = n - 4 , 现在 n 等于 6
n *= 10 // n = n * 10 , 现在 n 等于 100
n /= 2 // n = n / 2 , 现在 n 等于 20
n %= 2
想想看,最后 n 等于多少呢?
比较运算符
理解难度
★★★☆☆
实用程度
★★★★★
将两个数值作比较,并返回这个比较是否成立的布尔值(布林值),即返回true或是false,以下是常用的比较运算。
等于(a == b)
不等于(a != b)
大于(a > b)
小于(a < b)
大于等于(a >= b)
小于等于(a <= b)
1 == 1 // 返回 true 因为 1 等于 1
2 != 1 // 返回 true 因为 2 不等于 1
2 > 1 // 返回 true 因为 2 大于 1
1 < 2 // 返回 true 因为 1 小于2
1 >= 1 // 返回 true 因为 1 大于等于 1
2 <= 1 // 返回 false 因为 2 不小于等于 1
true和false,直接翻译就是真的假的;但是更容易理解的解释就是“是的”和“不是的”。
常用于条件语句,像是if条件:
var i = 1
if i == 1 {
print("是的,就是 1 ")
} else {
print("不是的,不是 1 ")
}
想想看,打印的结果是什么呢?
这是一个简洁的条件式运算:问题 ? 答案1 : 答案2。问题需要返回一个是否成立的布尔值(布林值),表示true或false,如果为true,则是返回答案1,反之如果为false,则是返回答案2。也就是下列写法的简写:
if 问题 {
答案1
} else {
答案2
}
以下是个例子:
var 我的分数 = 25
if 我的分数 < 60 {
我的分数 = 我的分数 + 50
} else {
我的分数 = 我的分数 + 20
}
想想看,我的分数现在是多少?
三元运算符
前述例子使用三元运算符可以简化成下面这样:
var 新的成绩 = 40
新的成绩 = 新的成绩 < 60 ? 50 : 20
print(新的成绩)
想想看“新的成绩”是多少?
何时使用Swift中的三元运算符?
三元运算符允许我们根据条件从两个结果中选择一个,并以非常简洁的方式进行选择:
let isAuthenticated = true
print(isAuthenticated ? "Welcome!" : "Who are you?")
有些人非常严重地依赖三元运算符,因为它使代码非常短,而有些人则尽可能远离它,因为它可能会使代码更难阅读。
三元运算符确实可以简化代码。但是在你非常熟悉这个语法之前,理解和易懂的代码。是比优雅简洁却自己也看不是很懂来的更重要。
不過现在有一個好機會使用三元运算符,那就是SwiftUI。在SwiftUI,三元运算符会有很多使用的機會。在这里就不多举出代码示例,因为它可能會讓人昏頭轉向。但是,如果你想的话,你也可以和三元运算符一起加油。
我更喜欢在可能的情况下不使用它们,這樣可以使的代码更容易阅读。
空值聚合运算符
理解难度
★★★★☆
实用程度
★☆☆☆☆
前面章节介绍过的可选类型, Swift 提供一个简洁的使用方法:a ?? b。先判断a是否为nil,如果a有值,不是nil,就会解析a并返回,但如果a为nil,则返回预设值b。
nil的意思就是空直,什么都没有的意思。
也就是下面这个写法的简写:
a != nil ? a! : b
这里用到前面提到的三元运算符,如果a不等于nil,则强制解析a并返回,否则就返回b。
“返回”的意思就是到这里为止,把所得到的数据结果应用出来。
以下为一个例子:
let defaultColor = "red"
var userDefinedColor: String? // 未指派值 所以预设为 nil
var colorToUse = userDefinedColor ?? defaultColor
// 未指派值给 userDefinedColor ,所以会返回 defaultColor
// 这边就打印出红色
print(colorToUse)
// 反之如果有指派值
var userAnotherDefinedColor: String? = "green"
var anotherColorToUse = userAnotherDefinedColor ?? defaultColor
// 这边就打印出绿色
print(anotherColorToUse)
区间运算符
理解难度
★☆☆☆☆
实用程度
★★★☆☆
Swift 提供两个方便表达一个区间的值的运算符。
闭区间运算符
表示方式为:a...b,定义一个包含从a到b(包括a和b)的所有值的区间。b必须大于等于a。
// 1...5 代表的就是 1,2,3,4,5 这五个数字
for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
// 依序会打印出
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25
半开区间运算符
理解难度
★☆☆☆☆
实用程度
★★★☆☆
表示方式为:a..<b,定义一个从a到b但不包括b的区间。b必须大于等于a,但当a等于b时,则不会有值。
// 1..<5 代表的就是 1,2,3,4 这四个数字 不包括 5
for index in 1..<5 {
print("\(index) * 5 = \(index * 5)")
}
// 依序会打印出
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
单侧区间运算符
理解难度
★☆☆☆☆
实用程度
★★★☆☆
表示方式为:a...或...a,代表一个只有以一边a为起点或终点,另一边则是无限延伸的区间,下面则是以显示一个阵列的元素为例:
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names[2...] {
print(name)
}
// 从阵列索引值为 2 的值开始依序印出
// Brian
// Jack
for name in names[...1] {
print(name)
}
// 依序印出至阵列索引值为 1 的值
// Anna
// Alex
逻辑运算符
理解难度
★★☆☆☆
实用程度
★★★☆☆
Swift 支援三个标准逻辑运算,常与条件式合用。
逻辑“非”(!a)
逻辑“且”(a && b)
逻辑“或”(a || b)
a及b都是逻辑布尔值(布林值),且皆会返回一个逻辑布尔值(布林值),即true或是false。
逻辑“非”
!a对一个布尔值(布林值)取相反值,即将true变false,或是将false变true。这是一个前缀运算符,且不加空格,例子如下:
let 白色 = true
if !白色 {
print("不是白色")
}
逻辑“且”
a && b表示只有当a跟b都为true时,才会返回true,否则如果a或b其中一个为false,就会返回false,如下:
let 开 = true
let 有电 = false
if 开 && 有电 {
print("能使用 !")
} else {
print("不能使用 !")
}
// 因为其中一个为 false 所以会返回 false
// 打印出:不能使用 !
逻辑“或”
a || b表示只要a跟b其中一个值为true时,就会返回true,除非a和b皆为false,才会返回false,如下:
let 星期六 = true
let 星期日 = false
if 星期六 || 星期日 {
print("有假日 !")
} else {
print("不能休假 !")
}
// 因为其中一个为 true 就会返回 true
// 打印出:有假日 !
括号优先
理解难度
★☆☆☆☆
实用程度
★★★☆☆
以上介绍很多运算符,当一个运算式太复杂时,可以使用括号( )来标示清楚,同时也用来表明优先级(如同传统学习数学计算一样,括号括起来的部份要优先计算)。例子如下:
// 数值运算
// 先乘除后加减 所以 number 等于 13
var number = 3 + 2 * 5
// 括号括起来的优先 所以 someNumber 等于 25
var someNumber = (3 + 2) * 5
// 逻辑运算
let 上班 = false
let 星期六 = true
let 星期日 = true
// 括号有优先权
if 上班 && (星期六 || 星期日) {
print("要上班 !")
} else {
print("休假 !")
}
// 括号优先,所以先做逻辑“或”判断 星期六 || 星期日 会返回 true
// 再与前面的 “上班” 作逻辑“且”的判断 会返回 false
// 所以这边会印出:休假 !