Strings and Characters

  • 使用“ """ ”创建多行字符串

  • 使用超过下方引号前空格数的空格缩进

  • 使用string.isEmpty判断字符串是否为空

  • 使用let和var区别是否可变
    这里只是单纯的是否可变,区别与oc中NSString与NSMutableString是否可变的复杂机制。

  • 可以使用string()创建

  • swift中string是值类型,不同于Oc中string作为特殊的对象类型,会自动进行值拷贝(所谓的值拷贝就是将a的值赋予b之后改变b的值不会影响到a,这是值类型的特征,不同于对象类型储存于同一内存改变其中一个会影响另一个,详情写在oc的基本知识里)

  • 可以使用forin遍历string中的characters

  • 可以使用字符数组作为参数构件字符

    let catCharacters:[Character] = ["C","a","t","!",""]
    let cat = String(catCharacters)
    
  • 多行字符串相加时后者第一行会加在前者最后一行后(前者需手动留空白行)。

  • 使用\()在字符串中加入变量

  • 由于不同类型的字符编码位数不同造成大小不同,所以 string 中的 index 不能用 int 类型。只能用如下方式:

    let greeting = "Guten Tag!"
    greeting[greeting.startIndex]
    // G
    greeting[greeting.index(before: greeting.endIndex)]
    // !
    greeting[greeting.index(after: greeting.startIndex)]
    // u
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    greeting[index]
    // a
    
  • endIndex 为最后一个字符串结尾的位置,所以访问字符串最后一个字符用 brefore:endIndex,否则如下:

    greeting[greeting.endIndex] // Error
    greeting.index(after: greeting.endIndex) // Error
    
  • 使用 indices 属性遍历字符串中所有字符

    for index in greeting.indices {
        print("\(greeting[index]) ", terminator: "")
    }
    // Prints "G u t e n   T a g ! "
    
  • index(before:), index(after:), 以及index(_:offsetBy:)可以用于所有遵循 Collection 协议的类型,包括 String,Array,Dictionary,Set。

  • 使用string.insert和string.remove插入和删除character

    var welcome = "hello"
    welcome.insert("!", at: welcome.endIndex)
    welcome.insert(contentsOf: " there", at: welcome.index(before:welcome.endIndex))
    welcome.remove(at: welcome.index(before: welcome.endIndex))
    let range = welcome.index(welcome.endIndex, offsetBy: -6)..
  • insert和remove可以用于任何遵守RangeReplaceableCollection协议的对象,包括String,Array,Dictionary,and Set。

  • SubString 为截取 String 形成的子字符串,类似于 String,有着几乎通用的方法(都遵循 StringProtocol协议)。不过 SubString 只能作为临时变量,不能存储,需要转为 String 。

    let greeting = "Hello, world!"
    //特别的index类型
    let index = greeting.firstIndex(of: ",") ?? greeting.endIndex
    //以string作为character数组,并在[]中传入index列表截取字符串
    let beginning = greeting[..

    原理:
    SubString 实际上是重用相对应 String 中的部分内存,所以如果 SubString 长期占用其内存,相应的源 String也需要长期存在不能被释放。故此 SubString 不能长期存储(substrings aren’t suitable for long-term storage)

  • 使用 ==!= 判断两个字符串是否一致。使用 hasPrefix 判断是否以某一字符串开头,使用hasSuffix判断是否以某一字符串结尾。

  • utf8和utf16可以用一位表示某些字符,但是例如,可能需要多个。而Unicode Scalar使用12bit,可以用一位表示各种字符。

你可能感兴趣的:(Strings and Characters)