SwiftNote-2
2016年04月24日 Swift

针对Note1进行细节补充

  • 可选值的概念

    Swift加入了一个Optional Value(可选值)的概念,就是一个变量可能是空的,也可能有具体的值,类似C语言中的指针,可能有指向,也可能是NULL。Swift中可选值可以针对所有类型,基本类型,类,自定义类型,都可以声明成可选值类型,即这个值可能是有值的,也可能是空的(nil),定义的方法就是在定义的语句之后加一个?

    1
    2
    var optionValue:String? = "swift" //此时可选值optionValue有值
    var optionValueInt:Int32? // 可选值没值,此时optionValueInt == nil

    有这样的定义之后那使用的时候就需要使用if语句判定可选的值内容是否为空,并且可以使用强制解析来取出可选值的内容,强制解析语法是在可选值类型变量后直接加!,即可以取出对应的值。

    1
    2
    3
    4
    5
    if optionValue != nil
    {
    // 意思就是,知道可选值已经不是nil了,直接使用强制解析拿到值
    print("optionValue = \(optionValue!)")
    }

    在返回可选值的地方都需要使用if语句判定其值是否为空!

    对一个没有判空的可选值直接进行强制解析会引起崩溃!

    在if语句中还有可选绑定的语法,即将可选值的内容赋值给一个变量/常量,if语句内对这个赋值后的常量/变量进行操作。

    1
    2
    3
    4
    5
    if let receive = optionValue  // 赋值已判空
    {
    // 这里不再需要对receive进行强制解析,receive里就是optionValue值的内容
    // statements
    }

    上面的使用!强制解析是显式的强制解析,还有一种隐式的强制解析,即有一种情况就是类型是可选值,但是明确其肯定有值的情况下(比如声明同时直接赋值,然后就马上使用),这时可以使用隐式强制解析,语法就是直接在声明的时候使用!,不使用?

    1
    2
    3
    4
    5
    6
    var optionImp:Float! = 10.0
    if optionImp != nil
    {
    // 此时的非空判定还是有效的,且此时不再需要再次进行强制解析,直接使用其值就好
    print("optionImp = \(optionImp)")
    }
  • 关于变量与注释

    1. 变量可以使用所有unicode字符(符合标识符规则的前提),比如可使用使用中文和Emoji表情当做变量名等

    2. 注释与形式与C++相同单行可以用//, 多行可以/* statements */这种,Swift中对多行的注释增强了,可以在多行注释中进行嵌套注释。(在C和C++中多行注释是不可以嵌套的,以后写swift代码可以肆无忌惮的多行注释了😃)

    3. 对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提供了四种数字字面量的表示方法

    1. 十进制,直接使用数字,如 1024,Swift数字内加入下划线来区分位置,如 1_000 等效于1000
    2. 二进制,0b开头,如 0b1001 相当于十进制的9。(感觉这个好方便!)
    3. 八进制,0o开头,如 0o11 相当于十进制的9。
    4. 十六进制,0x开头,与其他语言一致 如0x13相当于十进制的19。

    以上四种0后面字母均为小写

  • 元组,很多语言都提供的一种结构

    由N种不同类型数据组合在一起由逗号分隔,小括号括起来。

    1
    2
    var tupple = ("swift", 10.0, false) //一个元组
    var tuppleWithName = (name:"bugcode", age:27, married:false) // 指定元组中单元的名字

    可以使用下村来访问,由0开始,也可以使用成员的名字来访问

    1
    2
    print("fisrt member of tupple = \(tupple.0)")
    print("age of bugcode = \(tuppleWithName.age)")
  • 类型的别名,类型C语言中的typedef,Swift中是一个更加”贴切”的关键字typealias

    1
    2
    typealias AgeType = UInt8 // 这里AgeType就是UInt8
    print("AgeType.min = \(AgeType.min)")