Swift之字符串常用知識

Swift之字符串常用知識點

本文重點講了Swift中字符串的新特性,以及常用的知識點

字符串支持隱式多行賦值 """ """

字符串可以直接換行了,使用成對的三個雙引號來包括,注意,這樣的形式必須從第二行開始定義字符串

//incorrect
let string0 = """this is me
"""

//correct
let string0 = """
this is me
"""

//"this is me"

復制代碼

如果想要換行,直接更換一行即可,前后想多一行換行,直接留空一行

//"this is me\n"
let string1 = """
    this is me

    """
//"\nthis is me\n"

let string2 = """

this is me

"""
復制代碼

如果使用這種寫法,不想換行怎么辦呢,還可以使用\作為續(xù)行符,則改行不會自動換行,如:

ps;iOS開發(fā)交流技術:歡迎你的加入,不管你是大牛還是小白都歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗,討論技術, 大家一起交流學習成長

let string4 = """

    this is me, ok, this is next \
    line
    """
復制代碼

這里的對齊邏輯還有個有意思的地方,就是第二個"""對齊的符號的其他行的空白是忽略的,什么意思呢?先看下文檔中給的

image

文檔中沒有寫第二個""",這個是我寫代碼不小心對齊出錯之后發(fā)現(xiàn)的,看下例子:

"\nthis is me,\nok"

let string = """

    this is me,
    ok
    """

//這里this 和 ok 前面的空白是被忽略的

"    \n    this is me,\n    ok"
let string1 = """

    this is me,
    ok
"""

//而在string1中,this和ok的前面是有空白的,所以我推測這里的空白是根據(jù)第二個"""來對齊忽略的

復制代碼

特殊字符串

在字符串中,有很多的特殊字符,Swift中也使用/來表示特殊字符,如\0(空字符)、(反斜線)、\t(水平制表符)、\n(換行符)、\r(回車符)、"(雙引號)、'(單引號)。

也可以直接使用unicode編碼,寫成 \u{n}(u 為小寫),其中 n 為任意一到八位十六進制數(shù)且可用的 Unicode 位碼。
點擊可獲取Swift資料大全

而因為有了"""換行,所以其中的雙引號就不需要標識了,如:

//"this is "me","
let string = """
    this is "me",
    """
復制代碼

如果希望使用特殊字符串呢? 比如我就想字符串中包含\n, 這種情況就可以使用##來包含字符串,其中的特殊字符不會被轉義

let string = #"\n"#

let string1 = "\\n"
復制代碼

使用字符串

初始化字符串

這里不再贅述,直接使用簡單初始化即可

var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化方法
復制代碼

修改字符串

在OC中,我們使用NSString和NSMutableString來表示是否可以修改字符串,而在Swift中,直接使用let和var就可以識別

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

let constantString = "Highlander"
constantString += " and another Highlander"
// 這會報告一個編譯錯誤(compile-time error) - 常量字符串不可以被修改。
復制代碼

而在拼接字符串的時候,再也不用OC中痛苦地使用%@來標記,而是直接嵌入變量即可,使用()包含變量,如

let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message 是 "3 times 2.5 is 7.5"
復制代碼

甚至可以直接在字符串中進行一些函數(shù)計算,如

print(#"6 times 7 is \#(6 * 7)."#)
// 打印 "6 times 7 is 42."
復制代碼

注意: Swift中String為值類型,當作為函數(shù)的參數(shù)傳遞時,不會被修改,只會被copy使用

比如在OC中,如果參數(shù)中傳入一個string,我們是可以在函數(shù)中修改這個string的

NSString a = "string";
[self changeString:a];

NSLog(a);//new string

- (void)changeString:(NSString *)string
{
    string = "new string";
}
復制代碼

而在Swift中,函數(shù)中是無法直接修改參數(shù)的,除非使用inout等關鍵字實現(xiàn)

var b = "b"

//error
addString(string: b)
func addString(string: String) -> Void {
        string += "aaa"
    }

//correct
addString(string: &b)
func addString(string:inout String) -> Void {
        string += "aaa"

    }

復制代碼

遍歷字符串

for character in "Dog!??" {
    print(character)
}
// D
// o
// g
// !
// ??
復制代碼

注意,Swift中字符串不僅包含上述內(nèi)容,還包括諸如字符串索引、子字符串、unicode等內(nèi)容,我這只是挑了常用的知識進行總結

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1. 前言 泛型代碼讓你能根據(jù)你所定義的要求寫出可以用于任何類型的靈活的、可復用的函數(shù)。你可以編寫出可復用、意圖表...
    搬運工iOS橙閱讀 975評論 0 1
  • 彩排完,天已黑
    劉凱書法閱讀 4,479評論 1 3
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,667評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 7,861評論 0 4

友情鏈接更多精彩內(nèi)容