swift4之String與NSString的區別與使用


String是結構體,NSString是類,這是它們的根本區別。

在 Swift 中,結構體struct是值類型,String是結構體,所以也是值類型。值類型被賦予給一個變量、常量或者被傳遞給一個函數的時候,其值會被拷貝。這意味着它們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞的時候都會被復制。

類class是引用類型,NSString是類,所以也是引用類型。與值類型不同,引用類型在被賦予到一個變量、常量或者被傳遞到一個函數時,其值不會被拷貝。因此,引用的是已存在的實例本身而不是其拷貝。

 

一、String 與 NSString 的區別
String 與 NSString 各自有自身獨特的API,需要用到自身沒有的API時可以相互轉換。

1.1 String獨有的API
   · 初始化一個String變量str:

var str = String()
str = "54321-bca"

 


  · String的isEmpty屬性: 

///判斷是否為空
str.isEmpty//false
  · String的sorted方法:

///字符串排序並輸出字符的數組

str.sorted()//["-", "1", "2", "3", "4", "5", "a", "b", "c"]

 


  · String的filter方法(把不想要的字符過濾掉):

str = " St ri ng "

 



//方法1-完整閉包

let strFiltered = str.filter { (charater) -> Bool in
charater != " "
}
print(strFiltered)//”String“

 


//方法2-簡化版

let strFiltered2 = str.filter{ $0 != " " }
print(strFiltered2)//”String“
  · String的enumerated方法:

str = "String"

for (index,value) in str.enumerated() {
print("\(index)-\(value)")
}
/*
0-S
1-t
2-r
3-i
4-n
5-g
*/

 

 

1.2 NSString獨有的API
· 初始化一個NSString變量nsstr:

var nsstr = NSString()
nsstr = "54321"

 



 · NSString的boolValue屬性:

///判斷第一個字符,首字符為 Y\y\T\t\數字 返回true,否則返回false

nsstr.boolValue//true

 


 · NSString的isEqual屬性: 

///判斷兩個字符串是否相等

nsstr.isEqual(to: "54321")//true

 


 · NSString的integerValue屬性: 

///把字符串轉成整型Int,若不能轉成Int則返回0
nsstr.integerValue//54321
 

1.3 String與NSString的API不同,用法相同
· 初始化一個String變量str,一個NSString變量nsstr:

var str = String()
var nsstr = NSString()
str = "54321-bca"
nsstr = "54321-ns"

 


 · 獲取字符串的字符數量(String用count關鍵字,NSString用length關鍵字)

///獲取字符串數量

str.count//9
nsstr.length//8

 


  · 字符串的截取(String截取完成返回Substring,NSString截取完成返回String)

///結果返回Substring

str.prefix(str.count-2)//"54321-b"
str.prefix(while: {"0"..."5" ~= $0})//"54321"
str.suffix(3)//"bca"
str.dropLast(4)//"54321"
str.dropFirst(2)//"321-bca"

 



///結果返回String

nsstr.substring(to: nsstr.length-3)//"54321"
nsstr.substring(from: 6)//"ns"
nsstr.substring(with: NSMakeRange(1, 4))//"4321"

 


 · 添加字符到字符串結尾 (String是添加字符到自身,NSString是返回一個新的String,自身不變)

str.append("s")//()
print(str)//"54321-bcas"

 



//NSString不改變原來變量

let nsstr1 = nsstr.appending("s")
print(nsstr1)//"54321nss"
print(nsstr)//"54321ns"

 


二、String 與 NSString 的共同用法
   · 初始化一個String變量str,一個NSString變量nsstr:

var str = String()
var nsstr = NSString()
str = "54321-bca"
nsstr = "54321-ns"

 


  · 檢查字符串是否含有特定的前綴/后綴

///檢查字符串是否含有特定的前綴/后綴

str.hasPrefix("54")//true
str.hasSuffix("ca")//true

nsstr.hasPrefix("543")//true
nsstr.hasSuffix("ns")//true

 


 · 使用特定字符拆分字符串並輸出數組 

///使用特定字符拆分字符串並輸出數組

str.components(separatedBy: "-")//["54321", "bca"]

nsstr.components(separatedBy: "-")//["54321", "ns"]

 


 · 把字符串中的字母大小寫轉換 

///大小寫字母轉換(結果都返回String)

str.uppercased()//"54321-BCA“
str.lowercased()//"54321-bca”

nsstr.uppercased//"54321-NS“
nsstr.lowercased//"54321-ns"

 


 · 把字符串中的單詞首字母變大寫

///首字母大寫(結果都返回String)

str.capitalized//"54321-Bca"

nsstr.capitalized//"54321-Ns"
 

 

 · 把字符串前后不想要的字符去掉並返回一個新的String。不想要的字符可以是 空格.whitespaces \ 換行符.newlines \ 數字.decimalDigits \ 字母.letters \ 大寫字母.uppercaseLetters 等等。

str = " \r 54321-n "
nsstr = "\r 54321-ns "

 



///把字符串前后的空格和換行符去掉並返回一個新的String

let strTrimed = str.trimmingCharacters(in: .whitespacesAndNewlines)
print(str)//" \r 54321-n "
print(strTrimed)//"54321-n"

let nsstrTrimed = nsstr.trimmingCharacters(in: .whitespacesAndNewlines)
print(nsstr)//"\r 54321-ns "
print(nsstrTrimed)//"54321-ns"

 


 · 把十\十六\八進制數字轉字符串

//結果返回String

let hexStr = String().appendingFormat("%x",16)//十進制轉十六進制,結果為"10"
let oStr = String().appendingFormat("%o",16)//十進制轉八進制,結果為"20"
let dStr = String().appendingFormat("%d",0x10)//十六進制轉十進制,結果為"16"
let dStr1 = String(format: "%d", 0o10)//八進制轉十進制,結果為"8"

 



//結果返回NSString

let hexNSStr = NSString().appendingFormat("%x", 16)//十進制轉十六進制,結果為"10"
let oNSStr = NSString().appendingFormat("%o",16)//十進制轉八進制,結果為"20"
let dNSStr = NSString().appendingFormat("%d",0x10)//十六進制轉十進制,結果為"16"
let dNSStr1 = NSString(format: "%d", 0o10)//八進制轉十進制,結果為"8"

 


· 字符替換(如果想替換的字符找不到,則返回原來字符串)

str = "hello S"
nsstr = "hello NS"

let StrReplaced = str.replacingOccurrences(of: "S", with: "amberoot")
print(StrReplaced)//"hello amberoot"

let NSStrReplaced = nsstr.replacingOccurrences(of: "NS", with: "amberoot")
print(NSStrReplaced)//"hello amberoot

這位兄弟總結的不錯。


原文鏈接:https://blog.csdn.net/amberoot/article/details/88847596

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM