一、字符串是我们在开发中非常常用的数据类型,很多时候我们都需要字符串的遍历,截取等来实现我们的功能
1.字符串的定义
在swift中字符串用双引号表示是字符串,相当于OC中的去掉“@”,如:
let str = "我们一起写代码"
如果字符串中有基本数据类型我们的处理和OC不一样,不用formatter,swift的处理更简洁,这个是我个人很喜欢的,例如:
let name = "张三"
let age = 18
let x = "\(name)\(age)"
print(x)
在swift中使用斜杠加括号的方式连接不同的数据类型,不管是什么类型,都可以直接这样连接,还是很方便的
2.字符串的遍历
let str = "what's you name 点点" //UTF8 的汉字占三个字节 输出22
print(str.lengthOfBytes(using: .utf8))
print(str.characters.count) //字符串长度 通常这么使用
for c in str.characters {
//遍历字符串
print(c)
}
//as 用来做类型转换
let ns_Str = str as NSString
print(ns_Str.length)
3.字符串的截取
通常情况下取子串我们用NSString
let str = "我们一起写代码"
let oc_str = str as NSString
let x1 = oc_str.substring(with: NSMakeRange(0, 4))
print(x1)
根据子串获取范围:
let range = str.range(of: "我们")
print(range)
二、数组的定义和增删改
1.数组的定义
oc使用[]定义数组,swift一样,但是swift没有@
let array = ["张三","李四","王五","赵六"]//可以自动推导出类型是string ,表示数组中存的是string类型
print(array)
let array1 = [1,2,3,4,5]//自动推导出类型为int类型,基本数据类型不需要包装,在OC中 nsvalue nsnumber 包装基本数据类型
print(array1)
//结构体类型
letsize =CGSize(width:10, height:10)
letarray2 = [size]
print(array2)
//混合数组
letarray4 = [array,array1,array2]as[Any] //swift中有一个数据类型[AnyOnject],swift 中一个类可以没有任何父类,anyobject 比 NSobject 类型范围大
print("数组中的数组\(array4)")
2.数组的遍历
let array = ["张三","李四","王五","赵六"]
1.按下标遍历
for i in 0...array.count
print(array[i])
}
2.for in 遍历元素
for s in array1 {
print(s)
}
3.同时取出元素和下标
方法一:
for e in array.enumerated() {
print(e);
print("\(e.offset)\(e.element)")
//这里的e取出的其实是元祖
}
方法二:
//n是下标,c是元素
for (n,c) in array.enumerated() {
print("n:\(n) c:\(c)");
}
4.反序遍历
for s in array.reversed() {
print(s)/反序遍历元素
}
//反序元素和下标,先枚举拿出来再反序
for(n,c)inarray.enumerated().reversed() {
print("\(n):\(c)")
}
3.数组的增删改
var array = ["张三","李四","王五","赵六"]
1.数组增加用append,用下标更改内容
array.append("宋七")
array[0] ="马八"
直接用下标更改数组内容,一定要注意数组越界的问题,一旦给定下标超过数组范围,崩掉
2.数组删除用remove
array.remove(at:0)//根据下标删除
array.removeAll(keepingCapacity:true)//删除全部并保留空间
3.数组合并
varadd_array1 = ["苹果","香蕉","香梨"]as[Any]
letadd_array2 = ["橘子","柚子","橙子",100]as[Any] //要合并的必须是同一类型,不同类型可以用any类型转化
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" //添加一个键值对
dict["name"] ="赵六" //修改一个键值对
dict.removeValue(forKey:"age") // 直接给定key删除
注:*在字典中通过key取值,在字典中key是惟一的
*key不存在是新增,key存在是修改
*字典通过key来定位值,key必须是可以哈希的 将字符串变成唯一的整数,便于查找,提高字典的遍历的速度
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.字典的合并
字典合并不能像数组那样直接相加,如果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]
}