Swift-字符串和字符(一)

字符串字面量

字符串字面量可以用于為常量和變量提供初始值:

let someString = "Some string literal value"

注意someString常量通過(guò)字符串字面量進(jìn)行初始化,Swift 會(huì)推斷該常量為String類型淘讥。

  • 多行字符串字面量
    由一對(duì)三個(gè)雙引號(hào)包裹著的具有固定順序的文本字符集:
let welcomeMessgae = """
        如果你需要一個(gè)字符串是跨越多行的邢笙,
        那就使用多行字符串字面量
        由一對(duì)三個(gè)雙引號(hào)包裹著的具有固定順序的文本字符集
        """

一個(gè)多行字符串字面量包含了所有的在開(kāi)啟和關(guān)閉引號(hào)(""")中的行轻局。這個(gè)字符從開(kāi)啟引號(hào)(""")之后的第一行開(kāi)始迹蛤,到關(guān)閉引號(hào)(""")之前為止。這就意味著字符串開(kāi)啟引號(hào)之后(""")或者結(jié)束引號(hào)(""")之前都沒(méi)有換行符號(hào)败去。(譯者:下面兩個(gè)字符串其實(shí)是一樣的篮幢,雖然第二個(gè)使用了多行字符串的形式)

let singleLineString = "These are the same."
let multilineString = """
These are the same.
"""

如果你的代碼中,多行字符串字面量包含換行符的話为迈,則多行字符串字面量中也會(huì)包含換行符三椿。如果你想換行,以便加強(qiáng)代碼的可讀性葫辐,但是你又不想在你的多行字符串字面量中出現(xiàn)換行符的話搜锰,你可以用在行尾寫(xiě)一個(gè)反斜杠()作為續(xù)行符。

let welcomeMessgae = """
        如果你需要一個(gè)字符串是跨越多行的耿战,\
        那就使用多行字符串字面量

        由一對(duì)三個(gè)雙引號(hào)包裹著的\
        具有固定順序的文本字符集
        """

為了讓一個(gè)多行字符串字面量開(kāi)始和結(jié)束于換行符蛋叼,請(qǐng)將換行寫(xiě)在第一行和最后一行,例如:

let welcomeMessgae = """

        如果你需要一個(gè)字符串是跨越多行的剂陡,\
        那就使用多行字符串字面量
        由一對(duì)三個(gè)雙引號(hào)包裹著的具有固定順序的文本字符集

        """

一個(gè)多行字符串字面量能夠縮進(jìn)來(lái)匹配周?chē)拇a狈涮。關(guān)閉引號(hào)(""")之前的空白字符串告訴Swift編譯器其他各行多少空白字符串需要忽略。然而鸭栖,如果你在某行的前面寫(xiě)的空白字符串超出了關(guān)閉引號(hào)(""")之前的空白字符串歌馍,則超出部分將被包含在多行字符串字面量中。

image

在上面的例子中晕鹊,盡管整個(gè)多行字符串字面量都是縮進(jìn)的(源代碼縮進(jìn))松却,第一行和最后一行沒(méi)有以空白字符串開(kāi)始(實(shí)際的變量值)。中間一行的縮進(jìn)用空白字符串(源代碼縮進(jìn))比關(guān)閉引號(hào)(""")之前的空白字符串多溅话,所以晓锻,它的行首將有4個(gè)空格。

  • 字符串字面量的特殊字符
    字符串字面量可以包含以下特殊字符:

  • 轉(zhuǎn)義字符\0(空字符)飞几、\(反斜線)砚哆、\t(水平制表符)、\n(換行符)屑墨、\r(回車(chē)符)躁锁、"(雙引號(hào))、'(單引號(hào))绪钥。

  • Unicode 標(biāo)量灿里,寫(xiě)成\u{n}(u為小寫(xiě)),其中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}"      // ??, Unicode 標(biāo)量 U+1F496

由于多行字符串字面量使用了三個(gè)雙引號(hào)色鸳,而不是一個(gè)社痛,所以你可以在多行字符串字面量里直接使用雙引號(hào)(")而不必加上轉(zhuǎn)義符(\)。要在多行字符串字面量中使用 """ 的話命雀,就需要使用至少一個(gè)轉(zhuǎn)義符(\):

let threeDoubleQuotes = """
Escaping the first quote \"""
Escaping all three quotes \"\"\"
"""

初始化空字符串

var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化方法
// 兩個(gè)字符串均為空并等價(jià)蒜哀。

您可以通過(guò)檢查其Bool類型的isEmpty屬性來(lái)判斷該字符串是否為空:

if emptyString.isEmpty {
    print("Nothing to see here")
}
// 打印輸出:"Nothing to see here"

字符串可變性

您可以通過(guò)將一個(gè)特定字符串分配給一個(gè)變量來(lái)對(duì)其進(jìn)行修改,或者分配給一個(gè)常量來(lái)保證其不會(huì)被修改:

var variableString = "Horse"
variableString += " and carriage"
// variableString 現(xiàn)在為 "Horse and carriage"

let constantString = "Highlander"
constantString += " and another Highlander"
// 這會(huì)報(bào)告一個(gè)編譯錯(cuò)誤 (compile-time error) - 常量字符串不可以被修改吏砂。

字符串是值類型

Swift 的String類型是值類型撵儿。 如果您創(chuàng)建了一個(gè)新的字符串,那么當(dāng)其進(jìn)行常量狐血、變量賦值操作淀歇,或在函數(shù)/方法中傳遞時(shí),會(huì)進(jìn)行值拷貝匈织。 任何情況下浪默,都會(huì)對(duì)已有字符串值創(chuàng)建新副本,并對(duì)該新副本進(jìn)行傳遞或賦值操作缀匕。
Swift 默認(rèn)字符串拷貝的方式保證了在函數(shù)/方法中傳遞的是字符串的值纳决。 很明顯無(wú)論該值來(lái)自于哪里,都是您獨(dú)自擁有的乡小。 您可以確信傳遞的字符串不會(huì)被修改阔加,除非你自己去修改它。

在實(shí)際編譯時(shí)劲件,Swift 編譯器會(huì)優(yōu)化字符串的使用掸哑,使實(shí)際的復(fù)制只發(fā)生在絕對(duì)必要的情況下约急,這意味著您將字符串作為值類型的同時(shí)可以獲得極高的性能零远。

原文出自51Swift轉(zhuǎn)載請(qǐng)保留原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厌蔽,隨后出現(xiàn)的幾起案子牵辣,更是在濱河造成了極大的恐慌,老刑警劉巖奴饮,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異戴卜,居然都是意外死亡师脂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)安券,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泰鸡,“玉大人盛龄,你說(shuō)我怎么就攤上這事锹淌⌒荆” “怎么了汪拥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵脯燃,是天一觀的道長(zhǎng)追他。 經(jīng)常有香客問(wèn)我,道長(zhǎng)涤妒,這世上最難降的妖魔是什么单雾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮她紫,結(jié)果婚禮上硅堆,老公的妹妹穿的比我還像新娘。我一直安慰自己贿讹,他們只是感情好渐逃,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著民褂,像睡著了一般茄菊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赊堪,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天面殖,我揣著相機(jī)與錄音,去河邊找鬼哭廉。 笑死脊僚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遵绰。 我是一名探鬼主播辽幌,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼椿访!你這毒婦竟也來(lái)了乌企?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赎离,失蹤者是張志新(化名)和其女友劉穎逛犹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體梁剔,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年舞蔽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荣病。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渗柿,死狀恐怖个盆,靈堂內(nèi)的尸體忽然破棺而出脖岛,到底是詐尸還是另有隱情,我是刑警寧澤颊亮,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布柴梆,位于F島的核電站,受9級(jí)特大地震影響终惑,放射性物質(zhì)發(fā)生泄漏绍在。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一雹有、第九天 我趴在偏房一處隱蔽的房頂上張望偿渡。 院中可真熱鬧,春花似錦霸奕、人聲如沸溜宽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)适揉。三九已至,卻和暖如春煤惩,著一層夾襖步出監(jiān)牢的瞬間涡扼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工盟庞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吃沪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓什猖,卻偏偏與公主長(zhǎng)得像票彪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子不狮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 字符串和字符 [TOC] 字符串是例如 "hello, world" 降铸, "albatross" 這樣的有序的 C...
    伍哥___閱讀 1,098評(píng)論 0 0
  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開(kāi)發(fā)的 API 和技術(shù)的。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無(wú)灃閱讀 4,320評(píng)論 1 27
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí)驻仅,c語(yǔ)言谅畅,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等噪服;大學(xué)畢...
    oceanfive閱讀 3,095評(píng)論 0 7
  • Swift學(xué)習(xí)有問(wèn)必答群 : 313838956 ( mac版QQ有權(quán)限要求, 入群只能通過(guò)手機(jī)版 QQ申請(qǐng)...
    Guards翻譯組閱讀 6,612評(píng)論 9 13
  • 2015年6月粘优,“大眾創(chuàng)業(yè) 萬(wàn)眾創(chuàng)新”作為一項(xiàng)國(guó)策下發(fā)到各省市仇味,不管在內(nèi)陸小城還是沿海上廣深呻顽,各種創(chuàng)業(yè)谷、創(chuàng)業(yè)園丹墨、...
    王璐艷閱讀 515評(píng)論 1 0