Swift2 String

作者: 南栀倾寒 | 来源:发表于2015-07-25 14:26 被阅读236次

    写在开头 iOS开发者 群532084214 给大家提供一个交流技术 也可以聊天打屁的平台

    在Swift2 中 String 不在遵守CollectionType协议 现在的String是Character的集合体 现在操作起来就类似于Array

    为什么改变虽然字符串看起来是一个字符的集合 但是他有很多不同于其他集合类型的操作 如Array Set Dictionary

    和之前不同的地方

    当我们想往数组里面添加一个元素 其实是数组包含了这个元素 (Dictionary Set)类似 但是对于字符串操作 不是 当我们往字符串里添加一个东西 其实字符串就发生了变化

    var letters: [Character] = ["c", "a", "f", "e"]
    var string: String = String(letters)
    
    print(letters.count) // 4
    print(string) // cafe
    print(string.characters.count) // 4
    

    如果你想在字符串里面添加一个字符 如 U+0301 其实这个字符串长度还是4 但是最后一个字符变成了é

    let acuteAccent: Character = "\u{0301}" // ´ COMBINING ACUTE ACCENT' (U+0301)
    
    string.append(acuteAccent)
    print(string.characters.count) // 4 
    print(string.characters.last!) // é
    

    这个结果和其他语言的集合类型差距非常大

    根据结果我们现在猜一下原因

    补充
    另外一个字符串的和集合类型的区别是
    集合类型是值类型 用 == 来判等 集合里面的元素完全一样 集合就相等

    但是字符串不是 字符串基于基于语义和外观判等(就算unicode编码不一样) 如
    这里举个韩文的意思 (我看不懂韩文)

    let decomposed = "\u{1100}\u{1161}" // ᄀ + ᅡ
    let precomposed = "\u{AC00}" // 가
    
    decomposed == precomposed // true
    

    这两句话在韩语中语义一样 所以就判等 (真是独特的语言)

    Swift 虽然不是CollectionType 但是有些行为操作起来还是和CollectionType很像的
    下面是一张字符在不同编码时候的对比

    Paste_Image.png

    字符串在对比的时候是按照不同语言字符集的界定范围去比对的
    详情见这里
    https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html#//apple_ref/doc/uid/TP40014097-CH7-ID285

    相关文章

      网友评论

        本文标题:Swift2 String

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