在 Swift 中絕大多數(shù)的情況下梧躺,推薦使用
String
類型
- String 是一個(gè)結(jié)構(gòu)體,性能更高
- String 目前具有了絕大多數(shù) NSString 的功能
- String 支持直接遍歷
- NSString 是一個(gè) OC 對(duì)象,性能略差
- Swift 提供了
String
和NSString
之間的無(wú)縫轉(zhuǎn)換
字符串演練
- 遍歷字符串中的字符
for s in str.characters {
print(s)
}
- 字符串長(zhǎng)度
// 返回以字節(jié)為單位的字符串長(zhǎng)度蹂午,一個(gè)中文占 3 個(gè)字節(jié)
let len1 = str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
// 返回實(shí)際字符的個(gè)數(shù)
let len2 = str.characters.count
// 返回 utf8 編碼長(zhǎng)度
let len3 = str.utf8.count
- 字符串拼接
- 直接在 "" 中使用
\(變量名)
的方式可以快速拼接字符串
- 直接在 "" 中使用
let str1 = "Hello"
let str2 = "World"
let i = 32
str = "\(i) 個(gè) " + str1 + " " + str2
我和我的小伙伴再也不要考慮
stringWithFormat
了 :D
- 可選項(xiàng)的拼接
- 如果變量是可選項(xiàng),拼接的結(jié)果中會(huì)有
Optional
- 為了應(yīng)對(duì)強(qiáng)行解包存在的風(fēng)險(xiǎn),蘋(píng)果提供了
??
操作符 -
??
操作符用于檢測(cè)可選項(xiàng)是否為nil
- 如果不是
nil
裁眯,使用當(dāng)前值 - 如果是
nil
,使用后面的值替代
- 如果不是
- 如果變量是可選項(xiàng),拼接的結(jié)果中會(huì)有
let str1 = "Hello"
let str2 = "World"
let i: Int? = 32
str = "\(i ?? 0) 個(gè) " + str1 + " " + str2
- 格式化字符串
- 在實(shí)際開(kāi)發(fā)中讳癌,如果需要指定字符串格式穿稳,可以使用
String(format:...)
的方式
- 在實(shí)際開(kāi)發(fā)中讳癌,如果需要指定字符串格式穿稳,可以使用
let h = 8
let m = 23
let s = 9
let timeString = String(format: "%02d:%02d:%02d", arguments: [h, m, s])
let timeStr = String(format: "%02d:%02d:%02d", h, m, s)
String & Range 的結(jié)合
- 在 Swift 中,
String
和Range
連用時(shí)晌坤,語(yǔ)法結(jié)構(gòu)比較復(fù)雜 - 如果不習(xí)慣 Swift 的語(yǔ)法逢艘,可以將字符串轉(zhuǎn)換成
NSString
再處理
let helloString = "我們一起飛"
(helloString as NSString).substringWithRange(NSMakeRange(2, 3))
- 使用 Range<Index> 的寫(xiě)法
let startIndex = helloString.startIndex.advancedBy(0)
let endIndex = helloString.endIndex.advancedBy(-1)
helloString.substringWithRange(startIndex..<endIndex)