有 OC 经验的程序员快速学习 Swift 语法
Posted VeggieOrz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有 OC 经验的程序员快速学习 Swift 语法相关的知识,希望对你有一定的参考价值。
前言
苹果官方推出 Swift 语言至今,已经过了 7 年之久,Swift 也更新到了 5.5 版本, 它的语法和 API 也趋向于稳定。最近闲来无事,决定开始研究这 ios 开发编程语言的语法。因为之前有多门编程语言的使用经验,所以本文主要记录一些个人认为比较新奇的 Swift 语法。
中文版 Swift 文档:https://swift.bootcss.com/
Swift 语言开源链接:https://github.com/apple/swift
MJ 的 Swift 教学视频:https://www.bilibili.com/video/BV1uZ4y1T7G5
Swift PlayGround
所谓 “工欲善其事,必先利其器”。要想更好地学习 Swift 的语法,我们也需要合理使用开发工具 Xcode,通往们是通过 PlayGround 来进行 Swift 的语法练习。
我们可以通过 File -> New -> PlayGround
(如下图所示),新建一个 PlayGround。
接着选择 Black -> Next
,完成 PlayGround 的创建。
为了方便划分我们的单元练习,PlayGround 还支持多 Page 功能,每个 PlayGround Page 可以保存一份练习的 Swift 代码。我们可以通过下面两种方法新建 PlayGround Pag。
方法一:点击 File -> New -> PlayGround Page
方法二:双击 PlayGround 名称,选择 New PlayGround Page。
Swift 语法
可选类型与nil
在 OC 中,nil
只能赋值给 OC 对象,表示一个不指向任何对象的指针。而在 Swift 中,nil
意义有所不同,它表示值缺失(即没有值)的情况,可以用于任意类型的值缺失(包括基本类型、枚举、结构体和对象等)。
可选类型表示的是该类型的变量的值有可能出现缺失的情况,在类型后面加上 ?
就可以表示可选类型。如下所示:
// 可选类型,没赋值默认为 nil
var num: Int?
swift 是强类型语言,我们通常不能直接把可选类型直接赋值给基本类型,当我们确定可选类型变量一定包含值之后,可以在后面添加 !
来取值。
var num: Int? = 1024
// 对可选类型进行强解析(要确保它有值)
var specialNum: Int = num!
忽略参数标签
我们在声明函数的时候,需要把写明参数名。然后与之相对地,在调用函数的时候也需要写上参数名,如下面代码所示:
func sayHello(name: String) {
print("Hello, \\(name)~")
}
// 在调用的时候,需要把参数名 name: 带上
sayHello(name: "Veggie")
有时候,我们会觉得这样带参数名的函数调用方式比较麻烦,希望可以在调用的时候忽略它。这时,我们可以用忽略参数标签 _
来简化它,用法如下面代码所示。
// 在参数标签前面加上 _
func sayHello(_ name: String) {
print("Hello, \\(name)~")
}
// 函数调用时可以不需要
sayHello("Veggie")
可变参数
Swift 像其他高级语言一样,它的函数也支持可变参数的输入。一个可变参数可以接收零个或多个参数,可以使用在参数个数不确定的场景,我们通过在参数后面添加 ...
来定义可变参数。需要注意的是,一个函数只能有一个可变参数。使用例子如下所示:
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
// 输出 3.0, 是这 5 个数的平均数。
print(arithmeticMean(1, 2, 3, 4, 5))
// 输出 10.0, 是这 3 个数的平均数。
print(arithmeticMean(3, 8.25, 18.75))
可以看到可变参数在传入函数后会变成对应类型的数组,因此我们在大多是场景中可以直接使用数组代替。
inout 关键字
进行函数调用的时候,我们传参默认都是进行值传递,在函数内部改变参数的值,不会引起函数外部变量的改变。当我们希望进行引用传递的时候,可以用上 inout
关键字。在传参的时候,传入的变量需要用 &
修饰,是 C 语言类似。
// 交换 a 和 b 的值
func swapValue(_ v1: inout Int, _ v2: inout Int) {
let temp = v1
v1 = v2
v2 = temp
}
var a: Int = 1, b: Int = 2
// 传入的参数需要加上 &,进行地址传递
swapValue(&a, &b)
// 打印变量交换后的结果
print(a, b)
需要注意的是:
- 可变的参数不能标记为
inout
- 标记为
inout
的参数不能带默认值
后记
Swift 语法的快速学习,只是为了帮助我们快速看懂 Swift 项目中的代码,能够窥探其他人的编程思路,并能对现有的代码进行简单的定制化修改。
如果希望能熟练使用 Swift 语言,关键还是要自己多写,可以多利用新学的语法写小 Demo, 或者刷 LeetCode 题目。语法使用得多了,就很容易形成肌肉记忆,所谓的「Practice makes perfect」就是如此吧。
内容在持续更新中……
以上是关于有 OC 经验的程序员快速学习 Swift 语法的主要内容,如果未能解决你的问题,请参考以下文章