swift筆記三 (字符串和字符)

字符串字面量

代碼中包含一段預(yù)定義的字符串值作為字符串字面量。字符串字面量是由雙引號包裹著的具有固定順序的文本字符。

字符串字面量可以用于為常量和變量提供初始值。
let someString = "Some string literal value" //someString 常量通過字符串字面量進行初始化,Swift 因此推斷其為 String 類型。
字符串字面量可以包含以下特殊字符:

  • 1.轉(zhuǎn)義特殊字符 \0 (空字符)、\(反斜線)、\t (水平制表符)、\n (換行符)、\r (回車符)、" (雙引號)、' (單引號)。
  • 2.單字節(jié) Unicode 標(biāo)量,寫成 \xnn,其中 nn 為兩位十六進制數(shù)。
  • 3.雙字節(jié) Unicode 標(biāo)量,寫成 \unnnn,其中 nnnn 為四位十六進制數(shù)。
  • 4.四字節(jié) Unicode 標(biāo)量,寫成 \Unnnnnnnn,其中 nnnnnnnn 為八位十六進制數(shù)。

舉個??
wiseWords 常量包含了兩個轉(zhuǎn)移特殊字符 (雙括號);dollarSign、blackHeart 和 sparklingHeart 常量演示了三種不同格式的 Unicode 標(biāo)量:

let wiseWords = "\"Imagination is more important than knowledge\" - Einstein" 
// "Imagination is more important than knowledge" - Einstein 
let dollarSign = "\x24"        // $,  Unicode scalar U+0024 
let blackHeart = "\u2665"      // ?,  Unicode scalar U+2665 
let sparklingHeart = "\U0001F496"  // ????, Unicode scalar U+1F496 

初始化空字符串

為了構(gòu)造一個很長的字符串,可以創(chuàng)建一個空字符串作為初始值??梢詫⒖盏淖址置媪抠x值給變量,也可以初始化一個新的 String 實例:

var emptyString = ""               // empty string literal 
var anotherEmptyString = String()  // initializer syntax 
// 這兩個字符串都為空,并且兩者等價 

您可以通過檢查其 Boolean 類型的 isEmpty 屬性來判斷該字符串是否為空:

if emptyString.isEmpty { 
    println("Nothing to see here") 
} 
// 打印 "Nothing to see here" 

字符串可變性

您可以通過將一個特定字符串分配給一個變量(對其進行修改)或者常量(保證其不會被修改)來指定該字符串是否可以被修改:

var variableString = "Horse" 
variableString += " and carriage" 
// variableString 現(xiàn)在為 "Horse and carriage" 
let constantString = "Highlander" 
constantString += " and another Highlander" 
// 這會報告一個編譯錯誤(compile-time error) - 常量不可以被修改。 

字符串是值類型

Swift 的 String 類型是值類型。如果您創(chuàng)建了一個新的字符串值,那么當(dāng)其進行常量、變量賦值操作或在函數(shù)/方法中傳遞時,會進行值拷貝。在不同情況下,都會對已有字符串值創(chuàng)建新副本,并對該新副本進行傳遞或賦值。

連接字符串和字符

字符串和字符的值可以通過加法運算符 (+) 相加在一起并創(chuàng)建一個新的字符串值:

let string1 = "hello" 
let string2 = " there" 
let character1: Character = "!" 
let character2: Character = "?" 
 
let stringPlusCharacter = string1 + character1        // 等于 "hello!" 
let stringPlusString = string1 + string2              // 等于 "hello there" 
let characterPlusString = character1 + string1        // 等于 "!hello" 
let characterPlusCharacter = character1 + character2  // 等于 "!?" 

您也可以通過加法賦值運算符 (+=) 將一個字符串或者字符添加到一個已經(jīng)存在字符串變量上:

var instruction = "look over" 
instruction += string2 
// instruction 現(xiàn)在等于 "look over there" 
 
var welcome = "good morning" 
welcome += character1 
// welcome 現(xiàn)在等于 "good morning!" 

注意:您不能將一個字符串或者字符添加到一個已經(jīng)存在的字符變量上,因為字符變量只能包含一個字符。

比較字符串

Swift 提供了三種方式來比較字符串的值:字符串相等,前綴相等和后綴相等。

字符串相等

如果兩個字符串以同一順序包含完全相同的字符,則認(rèn)為兩者字符串相等:

let quotation = "We're a lot alike, you and I." 
let sameQuotation = "We're a lot alike, you and I." 
if quotation == sameQuotation { 
    println("These two strings are considered equal") 
} 
// prints "These two strings are considered equal" 
前綴/后綴相等

通過調(diào)用字符串的 hasPrefix/hasSuffix 方法來檢查字符串是否擁有特定前綴/后綴。兩個方法均需要以字符串作為參數(shù)傳入并返回 Boolean 值。兩個方法均執(zhí)行基本字符串和前綴/后綴字符串之間逐個字符的比較操作。

let romeoAndJuliet = [ 
    "Act 1 Scene 1: Verona, A public place", 
    "Act 1 Scene 2: Capulet's mansion", 
    "Act 1 Scene 3: A room in Capulet's mansion", 
    "Act 1 Scene 4: A street outside Capulet's mansion", 
    "Act 1 Scene 5: The Great Hall in Capulet's mansion", 
    "Act 2 Scene 1: Outside Capulet's mansion", 
    "Act 2 Scene 2: Capulet's orchard", 
    "Act 2 Scene 3: Outside Friar Lawrence's cell", 
    "Act 2 Scene 4: A street in Verona", 
    "Act 2 Scene 5: Capulet's mansion", 
    "Act 2 Scene 6: Friar Lawrence's cell" 
] 
//您可以利用 hasPrefix 方法使用romeoAndJuliet數(shù)組來計算話劇中第一幕的場景數(shù):
var act1SceneCount = 0 
for scene in romeoAndJuliet { 
    if scene.hasPrefix("Act 1 ") { 
        ++act1SceneCount 
    } 
} 
println("There are \(act1SceneCount) scenes in Act 1") 
// prints "There are 5 scenes in Act 1" 
//同樣,可使用hasSuffix方法來計算發(fā)生在Capulet公館和Lawrence牢房內(nèi)以及周圍的場景數(shù)。
var mansionCount = 0 
var cellCount = 0 
for scene in romeoAndJuliet { 
    if scene.hasSuffix("Capulet's mansion") { 
        ++mansionCount 
    } else if scene.hasSuffix("Friar Lawrence's cell") { 
        ++cellCount 
    } 
} 
println("\(mansionCount) mansion scenes; \(cellCount) cell scenes") 
// prints "6 mansion scenes; 2 cell scenes" 
大寫和小寫字符串

您可以通過字符串的 uppercaseString 和 lowercaseString 屬性來訪問一個字符串的大寫/小寫版本。

let normal = "Could you help me, please?" 
let shouty = normal.uppercaseString 
// shouty 值為 "COULD YOU HELP ME, PLEASE?" 
let whispered = normal.lowercaseString 
// whispered 值為 "could you help me, please?" 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,554評論 2 379

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