一. 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"