深入浅出 Swift 3

课程简介:2015 年末,苹果公司正式在 GitHub 上将 Swift 开源,如今 Swift 已经迈入了第三个大版本,随着其特性的逐渐稳定,本教程将在 Linux 环境下从零开始向你介绍 Swift 3 这门新兴的编程语言。

本教程由欧龙崎整理发布在 实验楼 ,全部系列教程及在线练习地址: 深入浅出 Swift 3

Swift 是苹果公司推出的一门全新的编程语言。最初,它被用于编写苹果设备上(iOS,macOS,watchOS 和 tvOS)的应用程序。后来,苹果公司将 Swift 开源,从这时候起 Swift 便可以在 Linux 上运行,这也就意味着 Swift 正在向一门全端语言发展。

从 Swift 推出到 2016 年,已经走过了两年的时间,这么长的时间内,Swift 已经进化到了第三个大版本。这期间伴随着很多的变化,而对于初学编程的你,无需考虑这些内容,Swift 3 以前的版本都已经成为历史,在本教程中,我们将从零开始,针对 Swift 3 直接开始学习。

在本教程中,我们不去讨论 Swift 如何去服务于 iOS/macOS 等苹果上的开发(在这些平台中,你可能听说过 Objective-C 这门语言早已服务它们多年,Swift 是专门为了用于替代它们而产生的),而是专注于讨论 Swift Open Source 在通用平台(当然,我们其实主要讨论 Swift on Linux)下的编程。

希望本教程能够成为你学习 Swift、甚至是学习编程的第一份教程。

适用读者

本教程属于新手教程,适用于毫无编程经验的读者。

起步

交互式 Swift

首先,对程序员来说,最兴奋的东西莫过于终端了,开发 Swift 应用程序也是一样,我们首先启动终端:

这时候我们输入 swift,就进入 Swift 的交互程序了:

Swift 能做什么?我们先来让它解决我们最常见的问题:计算。

尝试输入 1+1 能够看到 Swift 直接告诉了我们结果:

图中的 $R0: Int = 是什么你暂时还不需要知道,在后面的内容中我们会为你介绍。

你可以尝试更复杂的运算:

等等,怎么能够少了计算机界最著名的 Hello World! 呢?在 Swift 中,如果想要输出一段内容,可以通过 print() 这个东西(我们把它叫做函数,以后会详细介绍)来输出,例如:

脚本式 Swift

你肯定会觉得这样的办法不够高效,每次要做点什么只能一行一行的输入,非常的不方便,我们可以尝试使用执行脚本的方式来执行 Swift,首先我们要退出交互式 Swift,输入 :q:

为了保护好我们的代码,不妨在 Code 目录下创建一个 swift 目录。

图中已经提前创建好了 swift 文件夹,你可以使用 mkdir -p Code/swift 来创建这个文件夹,再 cd Code/swift 进入这个文件夹

然后编写一个以 .swift 结尾的 Swift 文件,使用 vim:

按下 i 键启动 vim 的编辑模式,输入 print("hello swift!") :

按下键盘左上角的 Esc 来退出编辑模式,再输入 :x ,回车,来保存退出:

这时候我们回到了终端,输入 swift main.swift 就能够执行刚才我们编写的 Swift 脚本了:

回答你几个问题:

1. 问:脚本是什么意思?

脚本,可以理解为『剧本』,每一部电影、电视剧都有它们自己的剧本,电影、电视剧都是根据剧本的描述,制作出来的。在计算机程序中也是如此,脚本用来描述一段程序的执行过程,在刚才的 main.swift 中,我们描述了一个输出 hello swift!的过程。

2. 问:单词 print 我认识,但是为什么要有 () 括号?为什么有 "" ?

print 是一个函数,现在你还不知道函数是什么,但你先记住如果我们要使用一个函数,让他发挥作用,就需要在函数的后面加上 ()。"" 把 hello swift! 包裹了起来,告诉 Swift 这就是我们要输出的东西(字符串, 之后会详细介绍)。

3. 问:mkdir/cd 它们是什么?

你需要先学习一下 Linux 基础课:

4. 问:什么是 vim?

你需要先学习一下 Vim 基础课:

编译 Swift

直接通过 swift xxx.swift 来执行 Swift 脚本通常是可以的,但是这和我们刚才的交互式 Swift 并没有什么两样,因为他也是一行一行处理出来的,能不能像 C/C++ 这些语言一样,编译成一个可执行的文件呢?可以的,我们可以使用 swiftc 这个命令来编译一个 .swift 程序:

但是这次我们什么都没有看到?不,输入 ls 就可以看到在我们的文件夹中多出来了一个文件:

我们可以直接执行这个文件:

回答你几个问题:

1. 问:什么是编译?好像和刚才使用脚本的方式没有区别?

编译是计算机程序里非常重要的一个概念,这里不去解释它的准确定义,但我们还是用刚才剧本的例子来解释这个概念:

我们刚才说脚本和剧本类似,那么编译就与电影电视剧的实际成片过程类似。我们说执行一个脚本,就是每次当我们要看这部电影的时候,都让演员按照剧本演一遍,这种方式费时费力。

而编译,则是让演员们演一遍,然后将整个过程记录到胶片里,当下次我们要观看这部电影的时候,就不需要再让演员们演一遍了,直接看成片就好了,效率得到了大大的飞跃。

总结来说,脚本就是电影剧本,编译就是记录到胶片、后期剪辑等一系列的过程、最后生成的 main 文件,就是我们实际看到的电影。

2. 问:执行的时候 ./ 是什么意思?

你需要先学习一下 Linux 基础课:

到目前为止我们已经熟悉编写 Swift 程序的三种基本方式了,在教程接下来的内容,我们将逐步深入 Swift。

教程涉及的内容

当你起步后,不妨浏览一下下面列出的关于本教程会和你介绍的东西,做到心中有数。

  • 常量、变量与运算符
    • let
    • var
    • 运算符
      • 赋值运算符
      • 算数运算符
      • 组合赋值运算符
      • 比较运算符
      • 三目运算符
      • 区间运算符
      • 逻辑运算符
  • 基础数据类型与可选类型
    • Int/Double
    • 布尔类型
    • 类型安全与类型转换
    • 字符、字符串
    • 数组、字典
    • 元组、集合
    • 可选类型
      • 可选值
      • 可选值的强制拆包
  • 逻辑控制流语句
    • 循环语句
      • for-in
      • while 和 repeat-while
    • 条件控制语句
      • if-let
      • switch
    • 控制转移
      • continue
      • break
      • fallthrough
  • 函数与闭包
    • 函数
      • 函数的定义
      • 无参数函数
      • 多参数函数
      • 无返回值函数
      • 多返回值函数
      • 函数的实参标签
      • 形参默认值
      • 函数作为参数
        • 函数的类型
    • 闭包
      • 闭包的定义
      • 闭包类型推导
      • 闭包隐式参数
      • 闭包的尾随形式
  • 结构体与类
    • 结构体
      • 结构体初始化
      • 计算属性
      • 结构体方法
      • 可变方法
      • 类与结构体的区别
      • 子类与继承
      • 实例方法与类型方法
  • 协议、扩展、枚举
  • 泛型、可选链、引用计数
    • 泛型
      • 泛型函数
      • 泛型类型
    • 可选链
    • 引用计数
  • 延伸阅读:Swift API 设计则例

本课程的全部系列教程及代码,可在 实验楼 查看并在线完成: Swift - 深入浅出 Swift 3

更多技术课程: 学习路径 - 实验楼

  • 版权声明: 本文源自互联网, 于5个月前,由整理发表,共 2778字。
  • 原文链接:点此查看原文