Swift2 String

写在开头 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 53.计算字符 在字符串中获取字符值的数量, 可以使用字符串字符属性中的计数属性: let unusualMena...
    无沣阅读 1,134评论 0 4
  • 上下左右为之宇,古往今来为之宙,宇宙=时空。
    isnavy阅读 186评论 0 0
  • 付爱宝至尚特种兵-吴云成功的看到,听到,感觉到21天后我可以蜕变成功成为一名微商特种兵,为此目标,我将全力以赴,全...
    彩香阅读 277评论 0 0
  • 夏天快要结束,可阳光却丝毫不见收敛,满满的洒在每一个角落。 这个季节,螃蟹开始慢慢变肥,生意也逐渐红火。 还没到饭...
    聊减肥话瘦身阅读 292评论 0 0