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
"""
復制代碼
這里的對齊邏輯還有個有意思的地方佛舱,就是第二個"""對齊的符號的其他行的空白是忽略的,什么意思呢挨决?先看下文檔中給的
文檔中沒有寫第二個"""请祖,這個是我寫代碼不小心對齊出錯之后發(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中字符串不僅包含上述內容晰韵,還包括諸如字符串索引发乔、子字符串、unicode等內容雪猪,我這只是挑了常用的知識進行總結