SwiftNote-3
2016年04月26日 Swift

运算符

基本的运算符与C语言无二致,并且对很多地方做了增强。

  • 基本加减乘除,取正负,逻辑运算,组合赋值,比较运算,自增自减,三元运算 均与C语言完全一致,且swift加了类型数据溢出的检测。运算结果超出类型的最大值会给出提示

    1
    2
    let addNum = Int32.max
    var res:Int32 = addNum + 1 // 这里会给出提示,因为res已放不下Int32的最大值 + 1的数据

    赋值运算的形式与C语言相同,但是swift的赋值不会返回值,也就是swift里不能像C语言中一样进行连续赋值,也不能在if判定里做赋值操作

    1
    2
    3
    4
    5
    var res = 1
    var assign:Int
    if assign = res // 这里会报语法错误
    {
    }
  • 增强的取余操作,可以对浮点数进行取余

    1
    2
    var res = 8 % 2.5 
    print("remainder = \(res)") // 此时res == 0.5 8 = 3 * 2.5 + 0.5
  • 针对可选类型加入空合运算符(??),形式是a ?? b, a必须是可选类型,b必须是可选类型内容的值类型

    意思就是如果可选值a是nil,则会取b的值,就是简单化的三元运算符的操作。

    1
    2
    3
    4
    var optionStr:String? = "optional"
    var optionInt:Int32? // 此时optionInt == nil
    var resStr = optionStr ?? "NotReachHere" // optionStr非空,取optionStr的值
    var resInt = optionInt ?? 42 // optionInt为空,取42赋给resInt
  • 区间运算符 ..<,分别表示半开区间与闭区间

    1 ..< 6 表示 1 2 3 4 5

    1 … 6 表示 1 2 3 4 5 6

字符串

  • 字符串字面量

    由双引号括起来的一组Unicode字符集合(Swift中单个字符都是Unicode的形式)。

    1
    let stringDemo:String = "swift string demo"
  • 空串构造

    1
    2
    let stringEmpty = "" // 直接使用空字符串初始化swift字符串
    var anotherEmptyStr = String() // 使用swift的默认字符串构造
  • 字符串构成

    Swift字符串都是单个Unicode字符构成,在Swift里是Character字符类型,可以使用字符串的characters属性来访问单个的String内部的Character字符集合,并可以通过for in的形式迭代出来

    1
    2
    3
    4
    5
    6
    let stringDemo = "雨燕 Swift"
    // for .. in的形式遍历整个string
    for char in stringDemo.characters
    {
    print("Single Character = \(char)")
    }

    获取字符串的长度需要使用字符串的characters属性内的count属性

    1
    2
    3
    var stringForTest = "SwiftTesting"
    // 使用characters属性里的count属性获取共有多少个Unicode字符,即字符串的长度
    print("string length = \(stringForTest.characters.count)")
  • 字符串比较

    使用通用的等于与不等于来进行字符串比较,通用的比较操作符 (!===)

    1
    2
    3
    4
    5
    6
    let string1 = "swift"
    let string2 = "bugcode"
    if string1 != string2
    {
    print("\(string1) is not same to \(string2)")
    }

    Swift提供字符串前缀与后缀的比较方法,分别是hasPrefix, hasSuffix

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var prefixStr = "http://bugcode.net"
    if prefixStr.hasPrefix("http://")
    {
    print("\(prefixStr) has prefix \'http://\'")
    }
    if prefixStr.hasSuffix("net")
    {
    // logic statements
    }

    字符串插值,swift可以在字符串内以\()的形式来对其他格式的数据进行格式化。

    1
    2
    3
    let intDemo:Int32 = 42
    let floatDemo:Float = 10.2
    print("string is \(intDemo) \(floatDemo)") // intDemo和floatDemo会被转换成字符串的形式
  • 字符串的访问与修改,因为swift的字符串采用的是Unicode的形式,每个的字符的长度是不一定的,所以牵引到某个字符需要从头对字符串进行索引查找,不可以像元组那样用String.index的方式来访问。Swift提供了一系列的访问属性和修改字符串的方法,并且可以按索引进行访问和修改,也可以按区间进行访问和修改。

    startIndex 字符串第一个位置,endIndex 字符串最后一个位置的下一个位置,并不是有有效的String索引,字符的查找索引修改都基于这二个属性来操作。

    可以独列一节来记录

  • 获取字符串对应的utf的表示形式

    1. utf-8与utf-16的utf形式直接使用字符串的utf8与utf16属性

      1
      2
      3
      var utfStyleStr = "SwiftString"
      utfStyleStr.utf8
      utfStyleStr.utf16
    2. utf-32的使用unicodeScalars的集合属性来访问

      1
      2
      let utf32Str = "utf32"
      utf32.unicodeScalars // 可通过for..in来遍历