针对Note1进行细节补充。
可选值的概念
Swift加入了一个Optional Value(可选值)的概念,就是一个变量可能是空的,也可能有具体的值,类似C语言中的指针,可能有指向,也可能是NULL。Swift中可选值可以针对所有类型,基本类型,类,自定义类型,都可以声明成可选值类型,即这个值可能是有值的,也可能是空的(nil),定义的方法就是在定义的语句之后加一个?:
1
2var optionValue:String? = "swift" //此时可选值optionValue有值
var optionValueInt:Int32? // 可选值没值,此时optionValueInt == nil有这样的定义之后那使用的时候就需要使用if语句判定可选的值内容是否为空,并且可以使用强制解析来取出可选值的内容,强制解析语法是在可选值类型变量后直接加!,即可以取出对应的值。
1
2
3
4
5if optionValue != nil
{
// 意思就是,知道可选值已经不是nil了,直接使用强制解析拿到值
print("optionValue = \(optionValue!)")
}在返回可选值的地方都需要使用if语句判定其值是否为空!
对一个没有判空的可选值直接进行强制解析会引起崩溃!
在if语句中还有可选绑定的语法,即将可选值的内容赋值给一个变量/常量,if语句内对这个赋值后的常量/变量进行操作。
1
2
3
4
5if let receive = optionValue // 赋值已判空
{
// 这里不再需要对receive进行强制解析,receive里就是optionValue值的内容
// statements
}上面的使用!强制解析是显式的强制解析,还有一种隐式的强制解析,即有一种情况就是类型是可选值,但是明确其肯定有值的情况下(比如声明同时直接赋值,然后就马上使用),这时可以使用隐式强制解析,语法就是直接在声明的时候使用!,不使用?
1
2
3
4
5
6var optionImp:Float! = 10.0
if optionImp != nil
{
// 此时的非空判定还是有效的,且此时不再需要再次进行强制解析,直接使用其值就好
print("optionImp = \(optionImp)")
}关于变量与注释
变量可以使用所有unicode字符(符合标识符规则的前提),比如可使用使用中文和Emoji表情当做变量名等
注释与形式与C++相同单行可以用//, 多行可以/* statements */这种,Swift中对多行的注释增强了,可以在多行注释中进行嵌套注释。(在C和C++中多行注释是不可以嵌套的,以后写swift代码可以肆无忌惮的多行注释了😃)
对Int类型的变量,有N种变体,不同长度需要类型的名字不同,分别是不同长度的有等号类型/无符号类型:
Int8/UInt8、Int16/UInt16、Int32/UInt32、Int64/UInt64
在对应平台下Int与对应的平台下最大的相同,即在32位平台下Int与Int32相同,UInt与UInt32相同,依次类推。获取某个整型的最大与最小值,使用max与min二个方法:
1
print("Int32.max = \(Int32.max) Int32.min = \(Int32.min)")
数字字面量
Swift提供了四种数字字面量的表示方法
- 十进制,直接使用数字,如 1024,Swift数字内加入下划线来区分位置,如 1_000 等效于1000
- 二进制,0b开头,如 0b1001 相当于十进制的9。(感觉这个好方便!)
- 八进制,0o开头,如 0o11 相当于十进制的9。
- 十六进制,0x开头,与其他语言一致 如0x13相当于十进制的19。
以上四种0后面字母均为小写。
元组,很多语言都提供的一种结构
由N种不同类型数据组合在一起由逗号分隔,小括号括起来。
1
2var tupple = ("swift", 10.0, false) //一个元组
var tuppleWithName = (name:"bugcode", age:27, married:false) // 指定元组中单元的名字可以使用下村来访问,由0开始,也可以使用成员的名字来访问
1
2print("fisrt member of tupple = \(tupple.0)")
print("age of bugcode = \(tuppleWithName.age)")类型的别名,类型C语言中的typedef,Swift中是一个更加”贴切”的关键字typealias
1
2typealias AgeType = UInt8 // 这里AgeType就是UInt8
print("AgeType.min = \(AgeType.min)")