Swift是苹果公司在2014年发布的一种编程语言,已经迅速成为历史上发展最快的语言之一。如果你对为macOS或iOS构建应用程序感兴趣,在我看来,Swift是最好的语言选择。
在本教程中,我们将通过学习Swift的基本操作并通过一些相关的例子进行练习来熟悉它。让我们开始吧!
安装
Swift在Mac、Windows和Linux上的版本是5.4.1。使用Xcode安装Swift很容易,Xcode是苹果公司用于桌面和原生iOS开发的免费工作流程。
你可以从macOS里面的App Store或者Swift的官方网站上下载Xcode。如果你使用的是Windows或Linux,请从其官方网站下载并安装Swift。
如果你不想在你的电脑上安装Swift,你可以试试Swift的在线游乐场。
打开一个Xcode Playground
一旦你在电脑上安装了Swift,使用Xcode打开一个Playground,在那里你可以开始编写你的代码。
数据类型
我们需要知道在Swift中支持哪些数据类型,以了解我们能完成什么。我们将使用以下六种数据类型。
数据类型 | 例子 | 代表 | 目的 |
---|---|---|---|
字符 | s 。w |
一个16位的Unicode字符 | 单一字符编辑 |
字符串 | swift language |
文本数据 | 保存、更新、修改一个文本/信息 |
符号 | 5 ,-5 |
一个整数 | 代表任何整数 |
Float | 5.5 ,-5.5 |
32位浮点数 | 代表一个 32位的浮点数 |
双数 | 5.5 ,-5.5 |
64位浮点数 | 代表一个 64位的浮点数 |
Bool | true 。false |
代表状态 (真/假) | 提供真/假值,在我们的程序中使用。 |
变量
编写一个程序需要大量的数据。变量提供了一种标记数据的方法,使其更容易修改和引用。
变量结构
我们将使用以下结构来格式化一个变量:Keyword variableName:dataType
。你可以在下面的代码块中看到使用的结构。
var name:String
复制代码
当我们使用上面的结构定义一个变量时,我们最初并没有在变量中放入任何数据。让我们在变量中添加数据,把它从一个null
,在编程中代表一个空值,修改为一个string
。
var name:String = "nerdjfpb"
复制代码
以后,我们可以根据需要引用上面的代码来访问这些数据。例如,print(name)
将在Playground控制台显示nerdjfpb
。你可以认为打印东西就是显示结果。我们可以看到名字里面是什么值。
我们可以很容易地改变变量的值。
name = "Nerd Jfpb"
复制代码
在用Swift写的时候,我们不需要在开始写它的值时指定数据类型。例如,在下面的代码中,Swift理解名字是一个字符串。
var name = "nerdjfpb"
复制代码
如果我们写下面的代码块,我们会收到一个错误。因为Swift是一种类型化语言,我们不能改变变量的数据类型。
name = 5
复制代码
想象一下,你想通过编程引用一个变量,但不想改变它的值。Swift提供了一种特定的方法来引用变量。
引用变量
为了引用一个变量,我们将使用以下结构:Keyword(let) variableName dataType = Value
,在下面的例子中可以看到。
let ownerName = "Nerdjfpb"
复制代码
我们只能定义一次ownerName
的值,而且不能改变它。该值将在整个程序中保持不变。
操作员
要使用Swift,我们需要了解这些基本运算符。
比较运算符
操作符 | 例子 | 解释 |
---|---|---|
== (等于 |
||
to) | variable1 == variable2 |
如果变量相等,则返回true |
!= (不 |
||
等于 ) | variable1 != variable2 |
如果变量不相等,返回 |
true。 | ||
> (大于 |
||
比) | variable1 > variable2 |
如果变量1比变量2大,返回真 |
>= (大于 |
||
高于 或等于) | variable1 >= variable2 |
如果变量1大于或 |
,等于变量2,则返回true。 | ||
< (小于 |
||
) | variable1 < variable2 |
如果变量1小于变量2,则返回 |
true。 | ||
<= (小于 |
||
比 或等于) | variable1 <= variable2 |
如果变量1小于或等于变量2,则返回 真。 |
算术运算符
运算符 | 例子 | 解释 |
---|---|---|
+ (加法) |
print(variable1 + variable2) |
打印变量1 和 |
变量2的加法 。 | ||
- (减法) |
print(variable1 - variable2) |
打印 变量1减去 |
变量2的结果。 | ||
* (乘法) |
print(variable1 * variable2) |
打印变量1和变量2的乘法 。 |
/ (除法) |
print(variable1 / variable2) |
打印 |
变量1除以变量2 | ||
% (余数) |
print(variable1 % variable2) |
打印变量1和 |
变量2的余数 |
控制流和条件式
编程涉及做出复杂的决定。我们需要学习如何在Swift中做决定。假设我们试图确定一个数字是偶数还是奇数。要做到这一点,我们需要检查一个给定的数字是否可以被除以2而不留下余数。
在Swift中,我们使用%
,找到余数并确定它是否等于零。假设我们有一个var num = 15
。让我们写条件来找出这个数字是偶数还是奇数。
余数结构
要找到余数,请遵循下面的结构。
Keyword (conditions) {
// code for execution here
}
复制代码
我们将使用的关键字是if
。条件将是num % 2 == 0
,执行的代码是打印阅读Given number is an even number
。
var num = 5
if (num%2 == 0) {
print("Given number is an even number")
}
复制代码
假设我们还想在数字不是偶数时通知用户。这一部分很简单!我们可以在每一个 语句中,用代码来执行。对于每个if
语句,我们可以写一个else
语句。
If/else
语句结构
我们的代码将使用下面的结构。
if (conditions) {
// Run the code inside if block
} else {
// Run the code inside else block
}
复制代码
你会在下面的代码块中看到结构和条件。
var num = 5
if (num%2 == 0) {
print("Given number is a even number")
} else {
print("Given number is a odd number")
}
复制代码
由于num
的值,要么if
语句会工作,要么else
语句会工作。你一次只能满足一个。
我们来扩展一下这个问题。假设我们想忽略所有的负数。我们将运行一个if/else
语句,排除零以下的数字。
按照下面的结构来解决这个问题。
if (conditions) {
// Run the code inside if block
} else if(conditions) {
// Run the code inside else if block
} else {
// Run the code inside else block
}
if (num < 0) {
print("Given number is a negative number")
}
else if (num%2 == 0) {
print("Given number is an even number")
}
else {
print("Given number is an odd number")
}
复制代码
很简单,对吗?
现在,假设你想显示一个数字是正数还是负数以及这个数字是偶数还是奇数。
var num = 3
if (num == 0) {
print("Given number is a zero")
} else if (num < 0) {
print("Given number is a negative number")
} else {
print("Given number is a positive number")
}
if (num%2 == 0) {
print("Given number is an even number")
}
else {
print("Given number is an odd number")
}
复制代码
你会收到以下输出。
Given number is a positive number
Given number is an odd number
复制代码
循环
想象一下,你想写出从0到100的每个数字。这应该是相当容易的,对吗?如果我告诉你要写出从零到一千的每个数字呢?或者从0到10,000?这将是困难的、无聊的、耗时的。
在这种情况下,计算机编程就来了。你可以给电脑编程,让它在一定时间内完成某项任务,你可以告诉它该怎么做。我们将要求计算机在Swift Playground中使用一个循环来写0到100。
在一个循环中,我们可以提供连续的任务和中断条件。在Swift中,有几个循环可用,包括for-in
、while
、repeat-while
。
我们将介绍每个循环,并使用每个循环执行相同的任务。假设我们需要从0数到100。
for-in
结构
使用下面的布局来构建一个for-in
循环。
keyword counterVariable in lowerLimit .. upperLimit {
// code for execution
}
复制代码
我们将用for
作为关键字,用count index
作为counterVariable
。lowerLimit
是我们开始计数的最小数字,而upperLimit
是我们停止计数的最高数字。
for count in 1...100 {
print(count) // for printing
}
复制代码
现在,让我们用while
循环来执行同样的任务。
while
循环结构
按照下面的顺序来设置你的while
循环。
keyword condition {
// code for execution
}
复制代码
我们将使用的关键字是while
,而我们将指定的条件是停止循环。在我们的例子中,当计数等于100时我们就停止。
var count = 1
while (count <= 100) {
print(count) // for printing
count = count + 1 // for increment value
}
复制代码
如果我们不使用count = count + 1
来增加数值,那么while
循环将无限期地继续下去,最终使程序崩溃。一台缓慢的计算机可能很难重置,所以在运行你的while
循环之前,一定要再次阅读代码,以确保你包含一个停止点。
repeat-while
结构
在上面的while
循环中,我们首先检查条件,然后运行里面的代码。考虑一下上面看到的同样的代码例子,以101
作为输入。
var count = 101
while (count <= 100) {
print(count) // for printing
count = count + 1 // for increment value
}
复制代码
在这种情况下,我们将不会收到任何输出,因为条件没有得到满足。
让我们用repeat-while
再试一下我们的例子。repeat-while
循环首先执行任务,然后检查条件,基本上是按照while
循环的相反顺序运行。
var count = 101
repeat {
print(count)
count = count + 1
}
while (count <= 100)
复制代码
repeat-while
代码的输出是101
。
希望现在你已经熟悉了Swift循环!
这里有一个问题需要你解决:找到1到100之间的所有偶数,并将它们打印在控制台中。你完成的代码将看起来像下面的代码块。
for count in 1...100 {
if (count%2 == 0) {
print(count)
}
}
复制代码
试试自己用while
和repeat-while
,执行同样的任务。
函数
为了理解函数,我们将重新审视循环。循环允许我们编写的程序可以一次又一次地重复同样的任务。
一个函数允许我们在需要时重复使用一大块代码。我们既可以写一个if/else
语句,也可以在一个函数里面写一个循环。一般来说,一个函数接受一些参数并使用这些参数返回一个结果。
让我们运行一个例子。使用一个函数,我们收到两个数字的和的结果,我们可以随意改变输入值。请注意,一个函数只有在你调用它时才起作用,你可以根据需要经常调用它。
函数结构
我们将使用以下结构来完成这个例子。
keyword functionName (parameters: parameters type) → returnType {
// block of code here
}
复制代码
下面,你会发现完整的代码,包括关键词、函数名称、参数和返回类型。
func sumOfTwo(num1: Int, num2: Int) -> Int {
return num1 + num2
}
var total = sumOfTwo(num1: 10, num2: 20)
print(total)
复制代码
下面的代码块展示了函数的灵活性。请注意,每一行都包括不同的数字值。
func sumOfTwo(num1: Int, num2: Int) -> Int {
return num1 + num2
}
var firstFunc = sumOfTwo(num1: 10, num2: 20)
print(firstFunc)
var secondFunc = sumOfTwo(num1: 5, num2: 7)
print(secondFunc)
var thirdFunc = sumOfTwo(num1: 12, num2: 51)
print(thirdFunc)
复制代码
我们可以用新的数值一次又一次地调用该函数,每次都能得到新的结果!
然而,我们可以将代码简化很多。如果我们只是打印结果,那么我们可以通过缩短代码来改进。
func sumOfTwo(num1: Int, num2: Int) -> Void {
print(num1 + num2)
}
sumOfTwo(num1: 10, num2: 20)
sumOfTwo(num1: 5, num2: 7)
sumOfTwo(num1: 12, num2: 51)
复制代码
这里使用的代码将给我们带来与上面写的代码相同的结果。我们可以直接从函数中打印,因为我们没有在其他地方使用这个值。
你可能已经注意到我们在Void
,而不是Int
,以代替returnType
。Void
,意味着我们不返回任何东西,只执行里面的任务。你可以通过运行下面的代码做同样的事情。
func emptyReturn() {}
func emptyReturn() -> Void {}
func emptyReturn() -> () {}
复制代码
你也可以写一个没有任何参数的函数。
func goodMorning() {
print("Good morning")
}
goodMorning()
复制代码
请看,我们写一个日志,里面没有传递任何值。
让我们利用我们所学到的知识,尝试一个艰难的例子吧!假设我们正在建立一个迷你计算器,使用一个可以加两个数和减两个数的函数。
func sumOfTwo(num1: Int, num2: Int) -> Int {
return num1 + num2
}
func substractOfTwo(num1: Int, num2: Int) -> Int {
return num1 - num2
}
func miniCalculator(num1:Int, num2: Int, work: String) {
if (work == "+") {
print(sumOfTwo(num1: num1, num2: num2))
}
else if (work == "-") {
print(substractOfTwo(num1: num1, num2: num2))
} else {
print("This operator function is not available yet.")
}
}
miniCalculator(num1: 12, num2: 21, work: "+")
miniCalculator(num1: 12, num2: 5, work: "-")
复制代码
最后的任务是使用以下函数打印给定数组上的所有偶数和奇数。
func oddOrEven(lowerLimit:Int, upperLimit: Int) {
for index in lowerLimit...upperLimit {
if(index%2 == 0){
print("\(index) is an even number")
} else {
print("\(index) is an odd number")
}
}
}
oddOrEven(lowerLimit: 1, upperLimit: 100)
复制代码
有许多不同的方法来写上面的代码,但我选择了保持简单。
总结
现在,你应该对Swift编程语言的工作原理有了清晰的认识。如果你正确理解了基础知识,那么你就可以用Swift编写更复杂的代码了。
记住这是一场马拉松,而不是短跑。提高你的编码能力需要你每天练习。请确保查看官方的Swift文档,以了解更多关于Swift的信息。
掌握Swift基础知识》一文首次出现在LogRocket博客上。