一兰伤、字符串是我們?cè)陂_(kāi)發(fā)中非常常用的數(shù)據(jù)類型,很多時(shí)候我們都需要字符串的遍歷钧排,截取等來(lái)實(shí)現(xiàn)我們的功能
?1.字符串的定義
在swift中字符串用雙引號(hào)表示是字符串敦腔,相當(dāng)于OC中的去掉“@”,如:
let str = "我們一起寫(xiě)代碼"?
如果字符串中有基本數(shù)據(jù)類型我們的處理和OC不一樣,不用formatter恨溜,swift的處理更簡(jiǎn)潔符衔,這個(gè)是我個(gè)人很喜歡的,例如:
? let name = "張三"
? ? let age = 18
? ? let x = "\(name)\(age)"
? ? print(x)
在swift中使用斜杠加括號(hào)的方式連接不同的數(shù)據(jù)類型糟袁,不管是什么類型判族,都可以直接這樣連接,還是很方便的
2.字符串的遍歷
? ? let str = "what's you name 點(diǎn)點(diǎn)" //UTF8 的漢字占三個(gè)字節(jié) 輸出22
? ? print(str.lengthOfBytes(using: .utf8)) ?
? ? print(str.characters.count)?//字符串長(zhǎng)度 通常這么使用
? ? for c in str.characters {
? ? //遍歷字符串
? ? ? ? print(c)
? ? }
? ? //as 用來(lái)做類型轉(zhuǎn)換
? ? let ns_Str = str as NSString
? ? print(ns_Str.length)
3.字符串的截取
?通常情況下取子串我們用NSString
? ? let str = "我們一起寫(xiě)代碼"
? ? let oc_str = str as NSString
? ? let x1 = oc_str.substring(with: NSMakeRange(0, 4))
? ? print(x1)
? 根據(jù)子串獲取范圍:
? ?let range = str.range(of: "我們")
? ?print(range)
二项戴、數(shù)組的定義和增刪改
1.數(shù)組的定義
oc使用[]定義數(shù)組形帮,swift一樣,但是swift沒(méi)有@
?let array = ["張三","李四","王五","趙六"]//可以自動(dòng)推導(dǎo)出類型是string ,表示數(shù)組中存的是string類型
?print(array)
let array1 = [1,2,3,4,5]//自動(dòng)推導(dǎo)出類型為int類型周叮,基本數(shù)據(jù)類型不需要包裝辩撑,在OC中 nsvalue nsnumber 包裝基本數(shù)據(jù)類型
?print(array1)
//結(jié)構(gòu)體類型
letsize =CGSize(width:10, height:10)
?? letarray2 = [size]
? ? print(array2)
//混合數(shù)組
?letarray4 = [array,array1,array2]as[Any] //swift中有一個(gè)數(shù)據(jù)類型[AnyOnject],swift 中一個(gè)類可以沒(méi)有任何父類,anyobject 比 NSobject 類型范圍大
?? print("數(shù)組中的數(shù)組\(array4)")
2.數(shù)組的遍歷
?let array = ["張三","李四","王五","趙六"]
1.按下標(biāo)遍歷
?? ?for i in 0...array.count
? ? ? ? print(array[i])
? ? }
2.for in 遍歷元素
for s in array1 {
? ? ? ? print(s)
? ? }
3.同時(shí)取出元素和下標(biāo)
方法一:
? ? for e in array.enumerated() {
? ? ? ? print(e);
? ? ? ? print("\(e.offset)\(e.element)")
? ? ? ? //這里的e取出的其實(shí)是元祖
? ? }
方法二:
? ? ? ? //n是下標(biāo)则吟,c是元素
? ? ? ? for (n,c) in array.enumerated() {
? ? ? ? ? ? print("n:\(n) c:\(c)");
? ? ? ? }
4.反序遍歷
for s in array.reversed() {
? ? ? ? ? ? print(s)/反序遍歷元素
? ? ? ? }
//反序元素和下標(biāo)槐臀,先枚舉拿出來(lái)再反序
?for(n,c)inarray.enumerated().reversed() {
? ? ? ? ? ? print("\(n):\(c)")
? ? ? ? }
3.數(shù)組的增刪改
var array = ["張三","李四","王五","趙六"]
1.數(shù)組增加用append,用下標(biāo)更改內(nèi)容
?array.append("宋七")
?array[0] ="馬八"
直接用下標(biāo)更改數(shù)組內(nèi)容氓仲,一定要注意數(shù)組越界的問(wèn)題水慨,一旦給定下標(biāo)超過(guò)數(shù)組范圍,崩掉
2.數(shù)組刪除用remove
?array.remove(at:0)//根據(jù)下標(biāo)刪除
?array.removeAll(keepingCapacity:true)//刪除全部并保留空間
3.數(shù)組合并
? ? ? ?varadd_array1? = ["蘋果","香蕉","香梨"]as[Any]
? ? ? ? letadd_array2 = ["橘子","柚子","橙子",100]as[Any] ? ? ? ?//要合并的必須是同一類型敬扛,不同類型可以用any類型轉(zhuǎn)化
? ? ? ? add_array1 += add_array2;
? ? ? ? print(add_array1)
三晰洒、字典的定義和增刪改
1.字典的定義
?let dict:[String:Any] = ["name":"張三","age":17]
指定是字典類型[key :value],key是String類型,value是任意類型
2.字典的增刪改
?var dict:[String:Any] = ["name":"王五","age":16,"sum":"fu"]
? ?dict["title"] ="gril" //添加一個(gè)鍵值對(duì)
? dict["name"] ="趙六" //修改一個(gè)鍵值對(duì)
? ?dict.removeValue(forKey:"age") //?直接給定key刪除
注:*在字典中通過(guò)key取值啥箭,在字典中key是惟一的
? ? ? ?*key不存在是新增谍珊,key存在是修改
? ? ? ?*字典通過(guò)key來(lái)定位值,key必須是可以哈希的 將字符串變成唯一的整數(shù)急侥,便于查找砌滞,提高字典的遍歷的速度
3.字典的遍歷
方法一:
可以直接獲取key和value侮邀,OC直接遍歷是key
for e in dict {
? ? ? ? print(e)
? ? ? ? print("\(e.key)\(e.value)")
? ? }
方法二:
? ? ? ?for(key,value)in dict {
? ? ? ? ? ? print("\(key)\(value)")
? ? ? ? ? ? //前面是key,后面是value
? ? ? ? }
4.字典的合并
字典合并不能像數(shù)組那樣直接相加贝润,如果key存在就修改绊茧,key不存在就新增
var dict:[String:Any] = ["name":"王五","age":16,"sum":"fu"]
?let dict2:[String:Any] = ["cat":"貓","dog":"狗"]
? ?for e in dict2 {
? ? ? ? ? ? dict[e.key] = dict2[e.key]
? ? ? ? }