swift4之String与NSString的区别与使用

从XCode的"Quick Help"可以看到,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"

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值