如果你习惯了OC的语法,第一次接触Swift的语法可能会有点抗拒,因为Swift的语法有点怪。但如果你有前端的基础,学Swift可能会有点吃力,如果你有C++的基础可能会学得比较快点。不管你有什么样的语法基础,学会Swift后你都会觉得这是门优秀的语言,总之相比哥哥OC更简洁,更高效。现在Swift的ABI版本已经到5.2了,总体趋于稳定,社区也很活跃,是系统学习的好时机。
一、打印(print)
可以认为是C
的扩展写法:
1 | let word = "world" |
- 以往OC中打印变量使用
NSLog("hello_%@",var)
,Swift使用\(变量)
二、分号
- 一句代码尾部可以省略分号(
;
) - 多句代码写到同一行时必须用分号(
;
)
三、注释
- 单行注释(//)
- 多行注释–支持多行嵌套,但必须是双标签(/**/)
1
2
3
4
5
6
7
8
9
10
11// 单行注释
/*
多行注释
*/
/*
1.多行注释
/* 多行注释的嵌套 */
2.多行注释
*/
Playground的注释支持markup语法(和markdown相似)
如何开启markup语法预览?
- 选中当前行 -> 菜单栏 -> Editor -> Show Rendered Markup
- 开启渲染:Show Rendered Markup
- 关闭渲染:Show Raw Markup
- 注意:markup语法只在Playground中有效
四、Markup语法
1 | //: # 一级标题 |
- 单行注释时,冒号前面不能有空格,后面必须有空格
- 多行注释时,冒号前面不能有空格,后面不能有内容,必须另起一行
五、标识符
- 标识符(比如常量名、变量名、函数名)几乎可以使用任何字符
- 标识符不能以数字开头,不能包含空白字符、制表符(Tab)、箭头(->)等特殊字符
六、数据类型
Swift没有基本数据类型的概念,数据类型分为两大类:
6.1. 值类型(value-type)
- 枚举(enum)
- Optional
- 结构体(struct)
- Bool、Int、Float、Double、Character
- String、Array、Dictionary、Set
6.1.1. 整数类型
- Int8、Int16、Int32、Int64、UInt8、UInt16、UInt32、UInt64
- 在32bit平台,Int等价于Int32;在64bit平台,Int等价于Int64。一般情况下直接使用Int即可,除非对内存有严格要求。
- 整数的最值:UInt8.max、Int16.min
6.1.2. 浮点类型
- Float,32位,精度只有6位
- Double,64位,精度至少15位
6.1.3. 字面量
- 布尔类型值在OC中是
0
和1
,但Swift中是true
和false
(和大部分语言一样) - 字符串类型值用双引号
- 字符类型值和字符串一样都是用双引号括起来,但是字符变量必须用
Character
修饰,否则会默认是字符串
1 | /// 布尔 |
- 整数和浮点数可以添加额外的零或者添加下划线来增强可读性
- 100_0000、1_000_000.000_000_1、000123.456
6.2. 引用类型(reference type)
- 类(class)
通过官方简介即可看出,Int是用struct描述的
七、类型转换
7.1. 整数转换
在Swift中不同类型之间是不能运算的,否则编译器会报错
正确做法:
1 | let int1: UInt16 = 2_000 |
- 把低类型转为高类型(为什么?字节占用)
7.2. 整数、浮点数转换
1 | let int1: UInt16 = 2_000 |
- 浮点转为整形是会把小数点后放弃,只取浮点整数部分
思考:每次都需要转换,对于未知类型的数据(服务器返回的数据)怎么办?
1 | // 字面量可以直接相加,因为数字字面量本身没有明确类型 |
八、var和let
- let代表常量,var代表变量(variable缩写)
- 编译器能自动推断出变量/常量的类型
- 两个使用前必须初始化(和其他语言不一样,编译时可以不用初始化),否则编译报错
格式:
1 | let 变量名: 变量类型 = 变量值; |
示例
1 | let age: Int = 10; |
九、元组
元组是借鉴C++中的概念(Python中也有此类型):
- 元组与列表类似,不同之处在于元组的元素不能修改。
- 元组使用小括号,列表使用方括号。
- 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可(无限的)。
- 元组解构用法时,变量名不能和其他同作用域的常规定义变量冲突
格式:
1 | /* |
示例:
1 | let tup1 = (404, "Not Found", "moreParas") |