开始
上一节,了解到了如何通过 Xcode 创建出了第一个 iOS 项目,创建项目的过程中,可以发现,iOS 项目开发中,使用到了 Swift 编程语言。苹果生态链中,苹果开发出了很多开发工具,其中包括 Objective-C [简称OC] 和 Swift。 从零开始学习 iOS 开发,可以从 Swift 开始开发。这也是苹果官方推荐的入门方式。
认识 Swift
Swift 是苹果公司 2014 年推出的现代化编程语言,专为 iOS、macOS 等苹果生态开发设计,完美替代 Objective-C。它语法简洁易读、安全性高,内置内存自动管理、类型推断等特性,大幅降低崩溃风险。兼具高性能与开发效率,支持面向对象、函数式编程,是苹果平台开发的首选语言,持续迭代更新且生态成熟。
同时,Swift 也是一个图灵完备的语言,理论上,你可以使用 Swift 做任何其他编程语言的事情。 Swift 编程语言于 2015 年 12 月 3 日正式开源,开源地址为 GitHub(github.com/apple/swift… Linux 等操作系统,极大拓展了应用场景。你甚至可以找到使用 Swift 开发的后端服务框架。
入门 Swift
安装好 Xcode 之后,正常情况下也会自动安装好 Swift 环境,可以点开 MacOS 的命令行。输入 swift 命令,如果看到如下输出,说明已经安装好了 Swift 环境。
~ swift
Welcome to Swift!
Subcommands:
swift build Build Swift packages
swift package Create and work on packages
swift run Run a program from a package
swift test Run package tests
swift repl Experiment with Swift code interactively
...
Hello World
编程语言的第一课往往都是学习如何输出一句 Hello World 开始的,接下来,看看如何通过 Swift 输出 Hello World。
首先,可以新建一个文件,命名为 hello.swift,这里需要注意的是,文件后缀一定要是 swift。这样编译器能识别出代码文件。打开文件输入如下代码:
print("Hello World!")
接下来需要运行代码,运行的方式有两种:
- swiftc 命令: 这是调用 swift 的编译器,将源文件编译为可执行文件。
- swift 直接带文件: 原先是 swift run,现在逐渐被弃用,可以直接通过 swift 加代码文件的方式运行,相当于直接编译生成了临时文件并且运行了这个临时的可执行文件。
下面是示例代码:
# 通过 swift 命令直接运行
~ swift hello.swift
Hello, World!
# 通过 swiftc 命令编译运行
~ swiftc hello.swift
~ ll
total 32
-rwxr-xr-x 1 staff 9.1K 3月 16 20:06 hello
-rw-r--r-- 1 staff 26B 3月 16 20:09 hello.swift
~ ./hello
Hello, World!
这里大致解释一下 swiftc 的命令过程。
- 通过
swiftc命令,编译了 hello.swift 代码文件,编译成功无报错,就什么也没有显示。 - 通过
ll命令查看当前目录下的文件,可以看到多出了一个 hello 的文件 - 可以看出来系统对 hello 文件的描述为
-rwxr-xr-x,这是一种 UNIX 系统对文件权限的描述,其中结尾的x代表着,这个文件有执行的权限。 - 通过
./hello命令执行,其中./表示当前目录下
这样就完成 Swift 语言的 Hello World。
Hello World 语法分析
了解完编写 Hello World 之后,就可以开始入门 Swift 语言了,从刚刚输出的 Hello World! 中,我们从中可以看出来一些特点。
- Swift 语句末尾不需要带分号
- 输出函数
print()没有引入包,说明这是系统默认的引入或者本身自带输出函数。
注释
注释是代码中不可或缺的内容,上一节中,看到了新建的 iOS 项目中的代码就有很多注释。注释不会参与代码执行,也不会被编译,只是起到辅助人读取代码。
Swift 中包含两种注释,多行注释和单行注释
/* 这是一条单行注释
这个注释跨行了 */
// 这是单行注释
变量与常量
Swift 使用两个关键字来声明变量和常量
- 变量
var: 变量是声明初始化后,还可以修改的量,使用var来声明 - 常量
let: 常量是声明初始化后,就允许修改了,如果代码中出现修改的行为,会报错。常量使用let声明。
Swift 变量和常量,也支持先声明,后赋值。有关常量和变量的使用,可以看如下的例子:
// 声明了一个常量 numberExpA 并完成赋值
let numberExpA = 100
// 声明了一个 Int 类型的常量 numberExpB 之后再完成赋值
let numberExpB: Int
numberExpB = 101
// 如果给赋值好的常量再次赋值,相遇奥改变这个常量的值会报错
numberExpB = 102
// error: immutable value 'numberExpB' may only be initialized once
// 通过 var 声明一个变量并完成赋值
var numberExpC = 100
// 声明了变量 numberExpD 并定义为 Int 类型, 之后完成了赋值
var numberExpD: Int
numberExpD = 101
// 变量可以修改值,现在将变量 numberExpD 修改为 102,并输出
numberExpD = 102
print(numberExpD)
// 输出结果为 102
// 如果一行有多条语句的话,需要使用分号区分隔开
let a = 1; let b = 2; let c = 3
// 常量也可以使用全大写(用下划线分隔)
let USER_NUMBER_PREFIX = "user_number"
变量和常量的命名规范
在对变量和常量的定义中,Swift 有一些命名规范约定。这些约定不是强制的,如果不遵守程序不会报错,但是为了更好的可读性和代码风格的统一,强烈推荐一定要遵守,才能写出好看,好认的代码。
- 使用驼峰命名法(camelCase)
- 首字母小写
- 常量可以使用全大写(用下划线分隔)
数据类型和自动推导
从之前的例子和说明中,可以发现,Swift 是强类型语言,这意味着Swift 禁止错误类型的参数继续运算。这也说明 Swift 有严格的类型系统。
自动类型推导
当在声明变量或者常量的同时进行初始化赋值的时候,编译器会对初始化的值进行类型自动推导,简化操作:
// number 自动推导为 Int
let number = 100
// 类型自动推导为Int的变量
var onlyNum = 200
onlyNum = "hello world"
// error: cannot assign value of type 'String' to type 'Int'
上边代码可以看出来,当声明了变量并自动推导为Int类型之后,给变量再次赋值字符串,会报错。
数据类型
Swift 中内置了丰富的数据类型,常用的数据类型包括
Int整型: Int/Int32/Int64, 32为系统中 Int 和 Int32 一致, 64 位系统中 Int 和 Int64 一致。Float和Double浮点数: Float为32位浮点数,Double为64位浮点数,又叫双精度,但不管使用什么浮点类型,都不能计算精确值,比如钱数等。Bool布尔类型: 布尔类型表示逻辑值,比如比较大小的结果 true 和 false 就是布尔的两个值。String字符串: 多个字符的集合。例如"hello world"Character字符: 表示一个字母或者"字"。 例如"h"
除此之外,也能自己定义数据类型。后续会陆续使用到。