摘要訊息 : 帶你了解 Swift 程式設計語言中的型別系統.

0. 前言

本文于 2022 年 1 月 20 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. 布尔类型

Bool 类型的值只能是 true 或者 false :

let isFriend = true
let isEnemy = false

Swift 语言无法像 C 语言那样用非 0 表示 true, 用 0 表示 false; 也不能像 Objective-C 那样, 使用 YES 表示 true, 使用 NO 表示 false.

2. 整数类型及其属性

Swift 提供有符号的整数类型 Int 和无符号整数类型 UInt.
整数类型有 8, 16, 32 和 64 位, 四种形式.
可以使用最小 .min 和最大 .max 的形式访问整数类型的最大值.

let minValueOfUInt8 = UInt8.min    //结果 : 0
let minValueOfUInt16 = UInt16.min    //结果 : 0
let minValueOfUInt32 = UInt32.min    //结果 : 0
let minValueOfUInt64 = UInt64.min    //结果 : 0
let minValueOfInt8 = Int8.min    //结果 : -128
let minValueOfInt16 = Int16.min    //结果 : -32768
let minValueOfInt32 = Int32.min    //结果 : -2147483648
let minValueOfInt64 = Int64.min    //结果 : -9223372036854775808
let minValueOfInt = Int.min    //结果 : -9223372036854775808
let minValueOfUInt = UInt.min    //结果 : 0
let maxValueOfUInt8 = UInt8.max    //结果 : 255
let maxValueOfUInt16 = UInt16.max    //结果 : 65535
let maxValueOfUInt32 = UInt32.max    //结果 : 4294967295
let maxValueOfUInt64 = UInt64.max    //结果 : 18446744073709551615
let maxValueOfInt8 = Int8.max    //结果 : 127
let maxValueOfInt16 = Int16.max    //结果 : 32767
let maxValueOfInt32 = Int32.max    //结果 : 2147483647
let maxValueOfInt64 = Int64.max    //结果 : 9223372036854775807
let maxValueOfInt = Int.max    //结果 : 9223372036854775807
let maxValueOfUInt = UInt.max    //结果 : 18446744073709551615

Swift 还提供一些用于整数类型的使用函数 :

var num = 30
num.distance(to : 40)    //获得两个数据的差值 (40-30), 结果 : 10
num.distance(to : 20)    //获得两个数据的差值 (20-30), 结果 : -10
num.advanced(by : 10)    //将num增加10 (30+10), 结果 : 40

3. 浮点类型及属性

Swift 提供了以下两种有符号的浮点数类型 :

  • Double 表示 64 位浮点数, 具有 15 位小数的精度;
  • Float 表示 32 位浮点数, 具有 6 位小数的精度.
let num0 = -2.1
let num1 : Double = 9.1
let num2 : Float = 9.1
let floatInfinity = Float.Infinity    //结果 : inf
let doubleInfinity = Double.Infinity    //结果 : inf

Swift 提供了大量用于浮点数据的使用函数 :

var num = -9.8
num.advanced(by:20)    //将 num 加上 20 (-9.8+20), 结果 : 10.2
num.distance(to:23.3)    //获得 num 和 23.3 的差值 (23.3-(-9.8)), 结果 : 33.1
num.isFinite    //判断 num 是否为有限的, 结果 : true
num.isInfinite    //判断 num 是否为无限的, 结果 : false
num.isZero    //判断 num 是否为零, 结果 : false
num.isLess(than:-9.0)    //判断 num 是否小于 -9.0, 结果 : true
num.multiply(by:2)    //将 num 乘以 2, 结果 : -19.6

4. 字符和字符串

字符串定义的两种方法 :

var str1 = ""
var str2 = String()

想让某个量为一个英文字母可以这样写 :

let char: Character = "A"
print(char)    //结果 : A

想让某个量为一个特殊字符可以这样写 :

let sun = "\u{2600}/"
print(sun)    //结果 : ☀

想让某个量为一串字符可以这样写 :

let str = "Hello, Swift"
let str2 = "Hello, Swift\u{2600}"

字符串的引入 :

let 数学 = 95
let 语文 = 98
let 成绩 = "你的语文成绩是 \(语文), 你的数学成绩是 \(数学)."
print(成绩)
//结果: 你的语文成绩是 98, 你的数学成绩是 95.

字符串之间可以直接用 "+" 进行连接, 还可以用 "==" 进行比较.

Swift 还提供一些字符串的函数 :

var name = ""
var EM = "!"
name.isEmpty    //检测字符串是否为空, 结果 : true
name = "Jonny"
name.append(EM)    //在字符串后面添加 EM 字符串, 结果 : Jonny!
name.insert(EM, at: name.endIndex)    //在字符串后面添加 EM 字符串, 结果 : Jonny!!
var userType = "我是一个来自中国的高中生"
print(userType.hasPrefix("我是"))    //在字符串前部分查找 "我是", 结果 : true
print(userType.hasSuffix("高中生"))    //在字符串后部分查找 "高中生", 结果 : true
var str1 = "hello"
var str2 = "HELLO"
print(str1.uppercased())    //将字符串转换为大写, 结果 : HELLO
print(str2.lowercased())    //将字符串转换为小写, 结果 : hello
var str = "hello, swift!"
print(str.capitalized)    //将字符串每个单词的第一个字母转换为大写, 结果 : Hello, Swift!
str.substring(from:str.index(str.startIndex, offsetBy: 7))    //获得从第一个字符开始到指定位置的字符串, 结果 : Swift!
str.substring(to:hello.index(hello.endIndex, offsetBy: -8))    //从字符串的结束点开始截取至结束点坐标左移 8 个字符后的位置, 结果 : Hello
str.replacingOccurrences(of: "Hello",with: "Hi")    //将字符串中的 Hello 用 Hi 代替, 结果 : Hi, Swift!
str.remove(at:str.index(hello.startIndex, offsetBy: 5))    //删除字符串指定位置上的字符, 结果 : ,

Swift 字符串中的转义符 :

转义符 用途说明
\0 空字符
\\ 反斜杠
\t 制表符
\n 换行符
\r 回车符
\" 双引号
\' 单引号

转义符在代码中的使用 :

let message= "Hi\tJerry, \n\"Goodmorning.\""
print(message)
/*
 输出结果 : Hi    Jerry,
 "Good morning."
*/

查找字符串中某个字符出现的次数 :

var num = 0
let phoneNumber = "13123456789"
for temp in phoneNumber.characters{
    if temp == "1"{
        num += 1
    }
}
print(num)    //结果 : 2

5.元组

元组是包含了若干个相关联变量的对象, 它经常被作为函数的返回值.

let people = ("Jonny", 18)
let peopleInformation = (name: "Jonny",age: 18)
let str1 = "Jonny"
let str2 = "Boy"
let(str1, str2) = peopleInformation
print(peopleInformation.name)     //结果 : Jonny
print(people.0)   //结果 : Jonny

6.运算符

一元运算符 :

  • "+" : 通常不添加, 添加后不改变值;
  • "-" : 使值变为其相反值;
  • "!" : 对布尔值取相反值.

二元运算符 : "+", "-", "*", "/", "%".

三元运算符 : question ? answer1 : answer2. 如果 question 为真, 则返回 answer1; 如果 question 为假, 则返回 answer2.

比较运算符 : ">", "<", ">=", "<=", "==". 比较运算符的返回值都是布尔值.

拥有同样值数量的元组也可以进行比较, 前提是元组中的值是可以比较的.

元组以从左到右的顺序, 对值进行比较, 直到找到两个不相等的值为止, 此时比较结束并且返回布尔值.

当元组中存在字符串的时候, 此时从字符串的第一个字符开始从左往右比较.

当两个元组的所有值都相同, 则认为这两个元组相等.

(2,3) > (1,3)//结果: true
("a",3) > ("class2",3)//结果: true
("class1", "class2) > ("class2", "class2")//结果: false
("A", 6) == ("A", 6)//结果: true