Swift 的String類型是值類型。 如果您創(chuàng)建了一個新的字符串,那么當其進行常量、變量賦值操作或在函數(shù)/方法中傳遞時,會進行值拷貝。 任何情況下,都會對已有字符串值創(chuàng)建新副本,并對該新副本進行傳遞或賦值操作。 值類型在 結構體和枚舉是值類型 中進行了說明。
注意:
與 Cocoa 中的NSString不同,當您在 Cocoa 中創(chuàng)建了一個NSString實例,并將其傳遞給一個函數(shù)/方法,或者賦值給一個變量,您傳遞或賦值的是該NSString實例的一個引用,除非您特別要求進行值拷貝,否則字符串不會生成新的副本來進行賦值操作。
Swift 默認字符串拷貝的方式保證了在函數(shù)/方法中傳遞的是字符串的值。 很明顯無論該值來自于哪里,都是您獨自擁有的。 您可以放心您傳遞的字符串本身不會被更改。
在實際編譯時,Swift 編譯器會優(yōu)化字符串的使用,使實際的復制只發(fā)生在絕對必要的情況下,這意味著您將字符串作為值類型的同時可以獲得極高的性能。