寫在開頭 iOS開發(fā)者 群532084214 給大家提供一個交流技術(shù) 也可以聊天打屁的平臺
在Swift2 中 String 不在遵守
CollectionType
協(xié)議 現(xiàn)在的String是Character的集合體 現(xiàn)在操作起來就類似于Array
為什么改變雖然字符串看起來是一個字符的集合 但是他有很多不同于其他集合類型的操作 如Array Set Dictionary
和之前不同的地方
當(dāng)我們想往數(shù)組里面添加一個元素 其實是數(shù)組包含了這個元素 (Dictionary Set)類似 但是對于字符串操作 不是 當(dāng)我們往字符串里添加一個東西 其實字符串就發(fā)生了變化
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!) // é
這個結(jié)果和其他語言的集合類型差距非常大
根據(jù)結(jié)果我們現(xiàn)在猜一下原因
補充
另外一個字符串的和集合類型的區(qū)別是
集合類型是值類型 用 == 來判等 集合里面的元素完全一樣 集合就相等
但是字符串不是 字符串基于基于語義和外觀判等(就算unicode編碼不一樣) 如
這里舉個韓文的意思 (我看不懂韓文)
let decomposed = "\u{1100}\u{1161}" // ? + ?
let precomposed = "\u{AC00}" // ?
decomposed == precomposed // true
這兩句話在韓語中語義一樣 所以就判等 (真是獨特的語言)
Swift 雖然不是CollectionType 但是有些行為操作起來還是和CollectionType很像的
下面是一張字符在不同編碼時候的對比
字符串在對比的時候是按照不同語言字符集的界定范圍去比對的
詳情見這里
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html#//apple_ref/doc/uid/TP40014097-CH7-ID285