swift

Swift 中的 String

2018-10-10  本文已影响159人  Mr大喵喵

String是Swift中的一个基本数据类型,String提供了多种方便操作比如字符串拼接 + , 字符串比较的 <= , == 等运算符。同时它桥接了NSString,也就是说String与NSString可以很好的进行转换使用as即可。但是二者还是有区别的,最大区别就是:

1,能使用String类型就尽量使用String类型,原因如下:

(1)现在Cocoa里所有的API都能接受和返回String类型,所以也没必要特地转换下。

(2)Swift的String是struct,而NSString类是NSObject,所以String更符合字符串“不变”这一特性。同时,在不触及NSString特有操作和动态特性的时候,使用String的方法,在性能上也会有所提升。

(3)由于String实现了像CollectionType这样的接口,所以有些Swift的语法特性只有String才能使用,而NSString却没有。
比如for...in的枚举遍历所有字符

let words = "Hangge.com"
for i in words{
    print(i)  //Hangge.com
}

2,要使用NSString的情况

(1)String有hasPrefix/hasSuffix方法用来判断是否以某字符串开头或结尾,但却没有containsString方法判断内部是否包含另一个字符串。但这个方法NSString却有,所有我们只能先将String转换成NSString。

let words = "Hangge.com"
if (words as NSString).containsString("ge"){
    print("Yes") //YES
}

或者使用String的rangeOfString方法来判断是否包含这个字符串:

let words = "Hangge.com"
if words.rangeOfString("co") != nil {
    print("Yes") //YES
}

3.截取string中的sting集合

let bcString = "zhong hua ren min gong he guo"

let subStringarray = bcString.split(separator: " ")

let stringArray = bcString.split(separator: " ").map { String($0) }

Strings in Swift 2

swift提供characters属性暴露字符集合视图,但是string与arr、set、dictonary是不同的

添加combining mark character这种字符的时候,改变的是内容

var letters: [Character] = ["c", "a", "f", "e"]
var string: String = String(letters)

print(letters.count) // 4
print(string) // cafe
print(string.characters.count) // 4

此时添加上升字符U+0301 ´,字符串仍是4个字符,但是最后的字符是é

let acuteAccent: Character = "\u{0301}" // ´ COMBINING ACUTE ACCENT' (U+0301)

string.append(acuteAccent)
print(string.characters.count) // 4
print(string.characters.last!) // é

此时字符串 characters 里面不在含有e不再包含´,而是包含é

string.characters.contains("e") // false
string.characters.contains("´") // false
string.characters.contains("é") // true

数组相等要求有相同的count、对应索引元素相等
结合相等要求有相同的count、第一个集合包含在第二个里面
字典相等要求二者有相同的key set,value pair
string相等是语义相等,呈现相等,而不管string是如何构造的,韩语下面是左+右=在下面的那个字

let decomposed = "\u{1100}\u{1161}" // ᄀ + ᅡ
let precomposed = "\u{AC00}" // 가

decomposed == precomposed // true

但是对于oc中的NSString 就是不相等的

let nsDecomposed = decomposed as! NSString
let nsPrecomposed = precomposed as! NSString
 nsDecomposed == nsPrecomposed // false
上一篇下一篇

猜你喜欢

热点阅读