SwiftNote-1
2016年04月22日 Swift

Swift简要记录 - 值,类型

  • Hello, World

    1
    print("Hello, World") // 不需要分号结尾
  • 变量,常量定义

    定义变量 var关键字,直接赋值swift根据值推断类型,显示指定需要变量名后冒号+变量类型

    1
    2
    var variable = 100 // 自动推断variable类型是Int
    var anotherVar:String = "bugcode.net" // 显式指定变量是字符串

    常量定义let关键字,类型规则变量定义,赋值后值不可更改

    1
    2
    let PAGE_SIZE = 120 // 自动推断
    let WINDOW_WID:Double = 80.0 // 指定浮点型

    swift可以根据定义时的赋值自动推断变量/常量类型,自动推断的前提是定义的赋值给了足够的信息可以让swift推断出类型,如果不能推断,那么就需要显式指定变量的类型。变量/常量可以自动推断类型,但是不会自动隐式的转换类型,如果需要将一种类型转换为另一种类型,需要手动显式转换,即类型名(需要转换的值)

    1
    var transType = String(12) // 12显式转换成为String类型

    tips: print函数输出时,需要格式化时候,只需要将要显示的数据(变量,常量)放到括号中,前面加反斜线即可,一切都在输出字符串内完成即可。

    1
    2
    3
    var ver = 12.0
    let info:String = "http://bugcode.net"
    print("ouput information: \(info) version: \(ver)")
  • 数组,字典,集合

    定义都是使用中括号([])同普通变量常量一样也可以自动推断,也可以显式指定类型。

    数组的初始化,三种方式:

    1
    2
    3
    4
    var arrayStr = ["bugcode", "demo", "swift"] // 自动推断为String类型数组
    var arrayRepeat = [String](count: 5, repeatedValue:"Ha") // 重复n次的值初始化
    let arrayInt:[Int64] = [1, 2, 3] // 显式指定为int64的数组
    var arrayOfEmpty= [Float]() // 显式创建空数组,因为空,无数据,需要指定类型

    数组可以进行加法操作,即二个数组合成一个新的数组

    1
    2
    3
    var sumOfArray = arrayStr + arrayStr
    sumOfArray += ["Objective-C", "C++"]
    print(sumofArray)

    元素的访问,使用下标即可访问对应位置元素,支持区间访问

    1
    2
    print("index of arrayStr 2 = \(arrayStr[2])")
    print("area of sumOfArray[1...2] \(sumOfArray[1...4]) same as \(sumOfArray[1..<5])")

    数组操作还内置了大量的方法来操作数组。

    tips:

    区间操作符号,…三个点表示一个闭区间,..<表示一个开区间

    字典初始化

    1
    2
    3
    4
    5
    var dictIntString = [1:"swift", 2:"Objective-c"] // 自动推断为[Int:String]
    let dictStrStr:[String:String] = ["Addr":"Bejing", "Job":"Coder"] // 显式指定字典类型
    var dictOfEmpty = [Int:String]() // 空字典
    var emptyDict = [String:String]()
    emptyDict = [:]// 同样是空字典

    字典的元素访问,使用字典的key,相当于把数组的下标换成key,这里需要注意的是,字典访问元素时拿出来的值是optional的(可选值),意思就是拿出来的值可能是nil,所以使用下标key形式的访问字典值会返回一个对应字典value的可选类型,使用类型+?的形式来表示,如:

    1
    dictIntString[1] // 这个值的类型就是String?

    因为对应字典key下的值可能是空的,所以使用optional来表示,也就是如果这个key下的的值存在,这个值就是字典值类型,否则就是nil。所以使用key下标取出的值最好取出选判定一下空值。

    1
    2
    3
    4
    if let x = dictIntString[1]
    {
    // do someting
    }

    二个重要的字典方法,更新某个key下对应的value,移动某个key对应的字典项,返回值都是之前的对应key下的value值

    1
    2
    3
    4
    5
    6
    7
    8
    if let removeValue = dictIntString.removeValueForKey(2)
    {
    // some code here
    }
    if let updateOldValue = dictIntString.updateValue("New Value", forKey:3)
    {
    // some code
    }

  • 集合初始化

    使用Set关键字

    1
    2
    3
    var emptySets = Set<String>() // 空集合
    var sets:Set = ["1", "2"] //  自动推断
    var typeSets:Set<Int> = [314, 1024] // 显式指定类型

    集合的四种基本操作(截图来自于Apple开发者官网)