Swift中的字符串(String)

介紹

Swift 中絕大多數(shù)情況下都推薦使用 String 類型,在 Swift3.0 更是取消了 NSStringSwift 文件中的代碼提示。

特點(diǎn)

  • String 是一個(gè)結(jié)構(gòu)體,性能比 NSString 更高;
  • String 擁有絕大部分 NSString 的功能;
  • String 可以直接進(jìn)行遍歷,NSString 不支持直接遍歷。

字符串的遍歷

override func viewDidLoad() {
   super.viewDidLoad()
   demo()
}
func demo() {
   let str = "這是一段測試字符"
   for c in str.characters {
      print(c)
   }
}

輸出結(jié)果:


字符串遍歷展示

獲取字符串的長度

  • 獲取字符串的字節(jié)長度
    override func viewDidLoad() {
       super.viewDidLoad()
       demo()
    }
    func demo() {
       let str = "這是一段測試字符"
       print(str.lengthOfBytes(using: .utf8))
    }
    
    用習(xí)慣了 Objective-C 里的 length 方法初轉(zhuǎn)到 Swift 會(huì)很不習(xí)慣。以上代碼的意思是通過 lengthOfBytes() 函數(shù)獲取字符串在內(nèi)存中的字節(jié)數(shù),.utf8 是指定字符串的編碼格式。以下為輸出結(jié)果:
    獲取字節(jié)長度代碼輸出

    utf8 編碼格式下每個(gè)漢字占用三個(gè)字節(jié),所以會(huì)輸出為24。
  • 獲取字符串字符數(shù)的兩種方式
    1. Swift 獲取字符串字符數(shù)(推薦使用);
    override func viewDidLoad() {
       super.viewDidLoad()
       demo()
    }
    func demo() {
       let str = "這是一段測試字符"
       print(str.characters.count)
    }
    
    1. 使用 NSString 中轉(zhuǎn)獲取字符串的字符數(shù)。
    override func viewDidLoad() {
        super.viewDidLoad()
        demo()
     }
     func demo() {
        let str = "這是一段測試字符"
        let ocStr = str as NSString
        print(ocStr.length)
     }
    
    上面代碼中的 as 表示將前面 str 做為 NSString,類似于 Objective-C 中的類型強(qiáng)轉(zhuǎn) (NSString *)str,以下為代碼輸出結(jié)果:
    獲取字符串字符數(shù)輸出結(jié)果

字符串的拼接

  • 代碼示例
    override func viewDidLoad() {
      super.viewDidLoad()
      demo()
    }
    func demo() {
      let name = "張三"
      let age = 25
      let title : String? = "總裁"
      print("姓名:\(name)\n年齡:\(age)\n職位:\(title ?? "")")
    }
    
    以上代碼是在 Swift 中常規(guī)的字符串拼接方式,格式為: "\(var或者let) 再也不需要考慮類似于stringWithFormat 這樣的語句了。值得注意的是可選項(xiàng)拼接的時(shí)候需要解包。
    代碼的輸出結(jié)果:
    字符串拼接輸出結(jié)果

限定格式的字符串拼接

  • 代碼示例
    override func viewDidLoad() {
     super.viewDidLoad()
     demo()
    }
    func demo() {
     let h = 5
     let m = 7
     let s = 6
     print(String(format:"%02d:%02d:%02d", h, m, s))
    }
    
    以上代碼將數(shù)值以時(shí)間格式輸出,類似于 Objective-C中的格式化字符串語句 [NSString stringWithFormat:]
    代碼輸出結(jié)果:
    時(shí)間格式代碼輸出

字符串的子串(截取)

在2.0和3.0時(shí)代,Swift有自己截取子字符串的方法,但一直在優(yōu)化,在4.0更新了以后更是放棄了 Swift 相對(duì)繁瑣的截取方法,所以在 Swift4.0 時(shí)代我們只有通過將 String 字符串轉(zhuǎn)成 NSString 來進(jìn)行操作

  • 代碼示例:
    override func viewDidLoad() {
       super.viewDidLoad()
       demo()
    }
    func demo() {
       let str = "abcdefg"
       let ocStr = str as NSString
       let s1 = ocStr.subString(with: NSMakeRange(2, 3))
       print(s1)
    }
    
    上面代碼表示定義了一個(gè)常量字符串 “abcdefg” 并將這個(gè)字符串強(qiáng)轉(zhuǎn)為 NSString,接下來的操作就和我們用 Objective-C 的操作一樣了, NSMakeRange(2, 3) 表示從第二個(gè)字符開始截取三個(gè)長度的子字符串。
    輸出結(jié)果:
    字符串截取結(jié)果輸出

    Swift3.0 的截取方法(已過期但仍可以使用),具體實(shí)現(xiàn)方法就不一一做介紹了,有時(shí)間會(huì)寫一篇關(guān)于 Swift 字符串操作的專題。
    代碼棄用提醒展示

總結(jié)

  • Swift 中的字符串 String 是一個(gè)結(jié)構(gòu)體;
  • StringNSString 更加強(qiáng)大,支持直接遍歷;
  • StringNSString 性能更高;
  • String 不能直接使用 length 獲取字符長度,通過 lengthOfBytes() 獲取到的長度是字符串的所占字節(jié)數(shù),如果要用 Objective-C 的方法操作 String 需要類型強(qiáng)轉(zhuǎn),寫法為 String as NSString
  • String 的拼接比 NSString 更加簡便好用,如果拼接復(fù)雜型字符串也有相應(yīng)的函數(shù);
  • String 的截取推薦轉(zhuǎn)換為 NSString 來操作,因?yàn)?Swift4.0 取消了字符串截取方法,使用 NSString 更容易理解。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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