美文网首页Swiftswift
Swift - Strings and Characters

Swift - Strings and Characters

作者: ienos | 来源:发表于2018-05-25 18:49 被阅读4次

    多行字符串

    • 使用""换行,增加代码可读性,并不会加入到 String Value 中,即实际字符串并不会换行。
    • 与结尾引号对齐的前面的空白将会忽略,反之,空白加入 String Value
    let someString = "Some string literal value"
    // 三个双引号,多行
    let mulilineString = """
        First line
        Second line \
            Third line \
    
        """
    

    转义字符

    let specialString = """
    \\  反斜线
    \0 空字符
    \t 制表符
    \n 换行符
    \r 回车符
    \'  单引号
    \" 双引号
    \""" OR \"\"\"  三个双引号
    \u{1F496} 1-8位十六进制等效于有效的 Unicode 编码
    """
    //
    var lastLineNotLineBreak = specialString + " multString 最后一行不会添加换行符"
    print(lastLineNotLineBreak)
    

    空字符串

    // 两种形式
    var emptyString = ""
    var anotherEmptyString = String()
    // 判断是否为空
    emptyString.isEmpty
    

    可变与不可变 var OR let

    String 是一个值类型

    • 当 String 的值被传递到函数/方法,或者被传递一个变量/常量时是 copy 的
    • 一个新的 copy String 值也是创建,并不是原来的那个;无需考虑来自于哪里,只能由自己改动

    循环读取字符

    for character in "Dog!🐶" {
        print(character)
    }
    

    通过 Character 数组构造字符串

    let exclamationMark: Character = "!"
    // String 能够通过一个 Character 构造的数组初始化
    let catCharactors: [Character] = ["C", "a", "t", "!", "🐱"]
    let catString = String(catCharactors)
    

    字符串拼接

    var instrution = "look" + " " + "over"
    instrution.append("!")
    instrution += "hello"
    print(instrution)
    

    扩展字形集群

    每一个 Character 代表一个扩展字形集群,一个扩展字形集群是一个由一个或多个 Unicode 标量组成的字符。

    let eAcute: Character = "\u{E9}" // é
    let combinedEAcute: Character = "\u{65}\u{301}"  // e followed by
    

    字符串中的字符数

    let unusualMenagerie = "Koala, Snail, Penguin, Dromedary"
    unusualMenagerie.count
    

    扩展字形集群不会影响字符数

    var word = "cafe" // word.count = 4
    word += "\u{301}" // word.count = 4
    

    swift 字符数:Unicode 扩展字形集群的数量
    OC 字符数:16位代码单元在 UTF-16 中的数量

    字符串索引

    下面的方法适用于遵循 Collection 协议, 例如 Array, Dictionary, Set

    var greeting = "Guten Tag!"
    greeting.startIndex // 第一个字符的索引
    greeting.endIndex // 最后一个字符的索引 + 1
    greeting.index(greeting.startIndex, offsetBy: 4) // 第一个字符的索引 + 4
    greeting.index(after: greeting.startIndex) // 第一个字符的索引 + 1
    greeting.index(before: greeting.endIndex) // 最后一个字符的索引
    // 越界会报错
    //greeting[greeting.endIndex] // Error
    greeting.indices // 索引数组
    

    插入和移除

    下面方法适用于遵循 RangeReplaceableCollection 协议,例如 Array, Dictionary, Set

    greeting.insert(contentsOf: "content", at: greeting.index(before: greeting.endIndex))
    greeting.remove(at: greeting.index(before: greeting.endIndex))
    let range = greeting.index(greeting.endIndex, offsetBy: 6) ..< greeting.endIndex
    greeting.removeSubrange(range)
    

    Substring

    let index = greeting.index(of: ",") ?? greeting.endIndex
    // Substring , 和 String 共享内存
    let begining = greeting[..<index] 
    // 由 Substring 创建出来的 String ,开辟新的内存
    let newString = String(begining) 
    

    字符串比较

    原则:如果两个 String 他们的扩展字形集群规范化相等,那么他们相等

    • 字符串和字符 == 和 !=
    • 前缀 .hasPrefix("")
    • 后缀 .hasSuffix("")
    // eg: eAcuteQuestion = combinedEAcuteQuestion
    let eAcuteQuestion = "Voulez-vous un caf\u{E9}?"
    let combinedEAcuteQuestion = "Voulez-vous un caf\u{65}\u{301}?"
    

    Unicode

    • UTF-8 - 8bit 代码单元:.utf8
    • UTF-16 - 16bit 代码单元:.utf16
    • UTF-32 - 32bit 代码单元 相当于 21-bit Unicode 标量值:.unicodeScalars
    for codeUnit in greeting.utf16 {
        // eg U+1F436 10进制 ASCII 码
        // UTF16 : [55357, 56374]
        // UTF8 : [240, 159, 144, 182]
        // UTF32 : [128054]
    }
    

    相关文章

      网友评论

        本文标题:Swift - Strings and Characters

        本文链接:https://www.haomeiwen.com/subject/jqprjftx.html