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很像的
下面是一张字符在不同编码时候的对比

Swift2 String_第1张图片
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)