基础入门
学习任何一门语言,首先入门的应该就是变量和数据类型了。
语言特性
Swift 可以说是一门较新的语言,苹果于2014年[WWDC]苹果开发者大会发布。
从Swift 2、Swift 3、到Swift 4,一直处于ABI不稳定阶段,有人戏说是每发布一个大的版本,相当于重新学一门新的语言。
直到2019年, Swift 5.0 的发布,ABI终于稳定,目前最新的稳定版本是5.2.5, 开发版本为5.3 。
由于ABI的稳定,现在是学习Swift的最好时机。
由于是一门较新的语言,因此Swift很大程度的吸收了其它优秀编程的特性和编程模式,根据官方的介绍,编写Swift代码的最明显的方式是:
- 安全、严格
- 快速
- 富有表现力。
在后续的学习中,我们会看到很多富有表现力的语法,这会让Swift语法更通俗易懂,但同时由于Objective-C的历史包袱,以及太过于富有变现力,也会有大量类似语法糖的东西,对初学者容易造成一定的困惑。
常量和变量
Swift中常量和变量必须在使用前被声明。
使用关键字 let 来声明常量(只能被赋值一次),使用关键字 var来声明变量。例如:
//Swift中常量和变量必须在使用前被声明。
//print(a) //error: use of unresolved identifier 'a'
//var a:Int
// swift中可以不使用 ';'
//变量
var str = "Hello, playground"
//常量
let sex = "男"
// 如果放在一行,应该添加分号
let name = "Jack"; var age = 18
// 常量和变量的声明可以显示指定类型,用':'隔开;也可以隐式不指定类型。
var personA:String = "Jim"
//不指定类型Swift会自动推断
var personB = "Bill"
//如果初始化时没有赋值,必须指定类型,用':'隔开
let personC:String
personC = "Jack Ma"
以下语言特性可能和其它编程语言不同,需注意:
/*
常量的值不要求在编译时期确定,但使用之前必须要赋值一次
*/
func retAge() -> Int {
return 18
}
let age2: Int
age2 = retAge()
print(age2) // 18
/*
在Swift中标识符(比如常量名、变量名、函数名)几乎可以使用任何字符
只要不能以数字开头即可
只要不包含空白字符、制表符、箭头等特殊字符即可
*/
let 姓名 = "Jack Ma"
var ? = "一杯啤酒"
print("\(姓名) 喝了 \(?)")
//输出:Jack Ma 喝了 一杯啤酒
// Optional 可选变量
// 声明一个可选类型的时候要在类型后面加上?,如
var score:Int?
/*
//Optional其实就是一个enum类,里面有None和Some类型。nil就是Optional.None,非nil就是Optional.Some
对一个可选类型的值,需要进行拆包才不会报错。但是这个值是nil还是有some value,就不确定了;
?是一种判断后再拆包的语法糖
!是一种强制拆包的语法糖
?? 合并空值运算符,可以取默认值
*/
// 如果score 有赋值,输出其值,否则输出0
print(score ?? 0) // 输出 0
score = 60
print(score ?? 0) // 输入60
var s1:String?
// 我不知道s1 是否赋值,如果s1不会nil,输出其字符数,否则输出
// 对于可能输出为nil的值,应通过 合并空值运算符 ??给出一个可选值
print(s1?.count ?? "0") // 输出 0
var s2:String?
s2 = "ABC"
// 我确定s2 已经赋值了,可以使用!断言,输出s2的字符数
print(s2!.count)
PS: 下一节预告:数据类型