1.0 翻譯:wh1100717 校對(duì):Hawstein
2.0 翻譯+校對(duì):DianQK
2.1 翻譯:DianQK 校對(duì):shanks, Realank,
2.2 校對(duì):SketchK
3.0 校對(duì):CMB,版本日期:2016-09-13 3.0.1, shanks, 2016-11-11
4.0 翻譯:kemchenj 2017-09-21
4.1 翻譯+校對(duì):mylittleswift
本頁包含內(nèi)容:
字符串是是一系列字符的集合,例如 "hello, world"
,"albatross"
。Swift 的字符串通過 String
類型來表示。
一個(gè) String
的內(nèi)容可以用許多方式讀取,包括作為一個(gè) Character
值的集合。
Swift 的 String
和 Character
類型提供了快速和兼容 Unicode 的方式供你的代碼使用。創(chuàng)建和操作字符串的語法與 C 語言中字符串操作相似,輕量并且易讀。字符串連接操作只需要簡(jiǎn)單地通過 +
符號(hào)將兩個(gè)字符串相連即可。與 Swift 中其他值一樣,能否更改字符串的值,取決于其被定義為常量還是變量。你也可以在字符串內(nèi)插過程中使用字符串插入常量、變量、字面量表達(dá)成更長(zhǎng)的字符串,這樣可以很容易的創(chuàng)建自定義的字符串值,進(jìn)行展示、存儲(chǔ)以及打印。
盡管語法簡(jiǎn)易,但 String
類型是一種快速、現(xiàn)代化的字符串實(shí)現(xiàn)。
每一個(gè)字符串都是由編碼無關(guān)的 Unicode 字符組成,并支持訪問字符的多種 Unicode 表示形式。
注意
Swift 的
String
類型與 FoundationNSString
類進(jìn)行了無縫橋接。Foundation 也可以對(duì)String
進(jìn)行擴(kuò)展,暴露在NSString
中定義的方法。 這意味著,如果你在String
中調(diào)用這些NSString
的方法,將不用進(jìn)行轉(zhuǎn)換。更多關(guān)于在 Foundation 和 Cocoa 中使用
String
的信息請(qǐng)查看 Using Swift with Cocoa and Objective-C (Swift 4)。
你可以在代碼里使用一段預(yù)定義的字符串值作為字符串字面量。字符串字面量是由一對(duì)雙引號(hào)包裹著的具有固定順序的字符集。
字符串字面量可以用于為常量和變量提供初始值:
let someString = "Some string literal value"
注意 someString
常量通過字符串字面量進(jìn)行初始化,Swift 會(huì)推斷該常量為 String
類型。
如果你需要一個(gè)字符串是跨越多行的,那就使用多行字符串字面量 — 由一對(duì)三個(gè)雙引號(hào)包裹著的具有固定順序的文本字符集:
let quotation = """
The White Rabbit put on his spectacles. "Where shall I begin,
please your Majesty?" he asked.
"Begin at the beginning," the King said gravely, "and go on
till you come to the end; then stop."
"""
一個(gè)多行字符串字面量包含了所有的在開啟和關(guān)閉引號(hào)("""
)中的行。這個(gè)字符從開啟引號(hào)("""
)之后的第一行開始,到關(guān)閉引號(hào)("""
)之前為止。這就意味著字符串開啟引號(hào)之后("""
)或者結(jié)束引號(hào)("""
)之前都沒有換行符號(hào)。(譯者:下面兩個(gè)字符串其實(shí)是一樣的,雖然第二個(gè)使用了多行字符串的形式)
let singleLineString = "These are the same."
let multilineString = """
These are the same.
"""
如果你的代碼中,多行字符串字面量包含換行符的話,則多行字符串字面量中也會(huì)包含換行符。如果你想換行,以便加強(qiáng)代碼的可讀性,但是你又不想在你的多行字符串字面量中出現(xiàn)換行符的話,你可以用在行尾寫一個(gè)反斜杠(\
)作為續(xù)行符。
let softWrappedQuotation = """
The White Rabbit put on his spectacles. "Where shall I begin, \
please your Majesty?" he asked.
"Begin at the beginning," the King said gravely, "and go on \
till you come to the end; then stop."
"""
為了讓一個(gè)多行字符串字面量開始和結(jié)束于換行符,請(qǐng)將換行寫在第一行和最后一行,例如:
let lineBreaks = """
This string starts with a line break.
It also ends with a line break.
"""
一個(gè)多行字符串字面量能夠縮進(jìn)來匹配周圍的代碼。關(guān)閉引號(hào)("""
)之前的空白字符串告訴 Swift 編譯器其他各行多少空白字符串需要忽略。然而,如果你在某行的前面寫的空白字符串超出了關(guān)閉引號(hào)("""
)之前的空白字符串,則超出部分將被包含在多行字符串字面量中。
在上面的例子中,盡管整個(gè)多行字符串字面量都是縮進(jìn)的(源代碼縮進(jìn)),第一行和最后一行沒有以空白字符串開始(實(shí)際的變量值)。中間一行的縮進(jìn)用空白字符串(源代碼縮進(jìn))比關(guān)閉引號(hào)("""
)之前的空白字符串多,所以,它的行首將有4個(gè)空格。
字符串字面量可以包含以下特殊字符:
\0
(空字符)、\\
(反斜線)、\t
(水平制表符)、\n
(換行符)、\r
(回車符)、\"
(雙引號(hào))、\'
(單引號(hào))。\u{n}
(u 為小寫),其中 n
為任意一到八位十六進(jìn)制數(shù)且可用的 Unicode 位碼。下面的代碼為各種特殊字符的使用示例。
wiseWords
常量包含了兩個(gè)雙引號(hào)。
dollarSign
、blackHeart
和 sparklingHeart
常量演示了三種不同格式的 Unicode 標(biāo)量:
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imageination is more important than knowledge" - Enistein
let dollarSign = "\u{24}" // $,Unicode 標(biāo)量 U+0024
let blackHeart = "\u{2665}" // ?,Unicode 標(biāo)量 U+2665
let sparklingHeart = "\u{1F496}" //