一. String
和 NSString
的根本區別
String
是結構體,結構體是「值類型」,因此 String
也是值類型。
- 值類型被賦予給一個變量、常量或者被傳遞給一個函數的時候,其值會被拷貝。這意味着它們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞的時候都會被複制。
NSString
是類,類是「引用類型」,因此NSString
也是引用類型。
- 引用類型在被賦予到一個變量、常量或者被傳遞到一個函數時,其值不會被拷貝。所以,引用的是已存在的實例自己而不是其拷貝。
二. String
與 NSString
獨有的API
2.1 String
獨有的API
2.1.1 初始化 String
var str = String()
str = "123456"
複製代碼
2.1.2 String
的 isEmpty
屬性
var str = String();
str = "123456";
print(str.isEmpty);
// false
複製代碼
var str = String();
print(str.isEmpty);
// true
複製代碼
var str = "";
print(str.isEmpty);
// true
複製代碼
2.1.3 String
的 sorted()
方法:
var str = "215423";
print(str.sorted());
//["1", "2", "2", "3", "4", "5"]
複製代碼
2.1.4 String
的 filter()
方法
let str = "12 34 56";
let filter = str.filter { (char) -> Bool in
char != " "
};
print(filter);
//123456
複製代碼
2.1.5 String
的 enumerated()
方法:
let str = "123456";
for data in str.enumerated() {
print(data);
}
/*
(offset: 0, element: "1")
(offset: 1, element: "2")
(offset: 2, element: "3")
(offset: 3, element: "4")
(offset: 4, element: "5")
(offset: 5, element: "6")
*/
複製代碼
2.2 NSString
獨有的API
2.2.1 初始化一個NSString
var nsStr = NSString();
nsStr = "123456";
print(nsStr);
複製代碼
var nsStr = NSString(stringLiteral: "123456");
複製代碼
var nsStr = NSString.init(string: "123456");
複製代碼
2.2.1 NSString
的 boolValue
屬性
- 首字符爲 Y、y、T、t、非0數字 返回true,不然返回false
var nsStr = NSString(stringLiteral: "123456");
print(nsStr.boolValue);
//true
複製代碼
2.2.2 NSString
的 isEqual()
方法
var nsStr = NSString(stringLiteral: "123456");
print(nsStr.isEqual(to: "123456"));
//true
複製代碼
2.2.3 NSString
的數值屬性
var nsStr = NSString(stringLiteral: "123456")
print(nsStr.intValue);
print(nsStr.floatValue);
print(nsStr.doubleValue);
複製代碼
2.3 String
與 NSString
寫法不一樣、功能相同的API
2.3.1 獲取字符串的字符數量
print(str.count); //6
print( nsStr.length); //6
複製代碼
2.3.2 字符串的截取
var str = "123456";
print(str.prefix(str.count - 2)); //"1234"
print(str.suffix(3)); //"456"
print(str.dropLast(4)); //"12"
print(str.dropFirst(2)); //"3456"
複製代碼
var nsStr = NSString(stringLiteral: "123456");
print(nsStr.substring(to: nsStr.length - 3)) //"123"
print(nsStr.substring(from: 3)) //"456"
print(nsStr.substring(with: NSMakeRange(1, 4))) //"2345"
複製代碼
2.3.3 添加字符到字符串結尾
var str = "123456";
str.append("abc");
print(str);
//123456abc
複製代碼
- NSString是返回一個新的String,自身不變
var nsStr = NSString(stringLiteral: "123456");
let nsStr1 = nsStr.appending("abc");
print(nsStr); //123456
print(nsStr1); //123456abc
複製代碼
2.4 String
與 NSString
相同的API
2.4.1 是否含有特定的前綴/後綴
var str = "123456";
str.hasPrefix("12") //true
str.hasSuffix("56") //true
var nsStr = NSString(stringLiteral: "123456");
nsStr.hasPrefix("12") //true
nsStr.hasSuffix("56") //true
複製代碼
2.4.2 使用特定字符拆分字符串
var str = "123456-11";
str.components(separatedBy: "-"); //["123456", "11"]
var nsStr = NSString(stringLiteral: "123456-22");
nsStr.components(separatedBy: "-"); //["123456", "22"]
複製代碼
2.4.3 字母大小寫轉換
var str = "abc";
print(str.uppercased()); //ABC
print(str.lowercased()); //abc
var nsStr = NSString(stringLiteral: "cba");
print(nsStr.uppercased); //CBA
print(nsStr.lowercased); //cba
複製代碼
2.4.4 首字母大寫
var str = "abc";
print(str.capitalized); //Abc
var nsStr = NSString(stringLiteral: "cba");
print(nsStr.capitalized); //Cba
複製代碼
2.4.5 去除特定字符串
- 空格
.whitespaces
- 換行符
.newlines
- 數字
.decimalDigits
- 字母
.letters
- 大寫字母
.uppercaseLetters
let str = "\r abc ";
let strTrimed = str.trimmingCharacters(in: .whitespacesAndNewlines)
print(strTrimed); //abc
let nsStr = NSString(stringLiteral: "\r cba ");
let nsStrTrimed = nsStr.trimmingCharacters(in: .whitespacesAndNewlines);
print(nsStrTrimed); //cba
複製代碼
2.4.6 字符替換
let str = "hello String";
let str1 = str.replacingOccurrences(of: "String", with: "world")
print(str1) //"hello world"
let nsStr = NSString(stringLiteral:"hello NSString");
let nsStr1 = nsStr.replacingOccurrences(of: "NSString", with: "world")
print(nsStr1) //"hello world"
複製代碼
2.4.7 十 \ 十六 \ 八進制數轉字符串
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"
複製代碼
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"
複製代碼