1. 字符串
- String 是一个结构体,性能更高,NSString 是一个 OC 对象,性能略差
- String目前具有了绝大多数NSString的功能
- String 支持直接遍历
- Swift 提供了 String和 NSString之间的无缝转换
1.1 遍历字符串中的字符
for s in str.characters {
print(s)
}
1.2 字符串长度
// 返回以字节为单位的字符串长度,一个中文占 3 个字节
let len1 = str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
// 返回实际字符的个数let len2 = str.characters.count
// 返回 utf8 编码长度
let len3 = str.utf8.count
1.3 字符串拼接
直接在 "" 中使用 \ (变量名)的方式可以快速拼接字符串
let str1 = "Hello"
let str2 = "World"
let i = 32
str = "\(i) 个 " + str1 + " " + str2
1.4 格式化字符串
在实际开发中,如果需要指定字符串格式,可以使用String(format:...)的方式
func demo4() {
let h = 8
let m = 5
let s = 6
print("\(h):\(m):\(s)")
// 如果需要使用格式字符串的时候,可以单独使用 String(format: xxx)
let dateString = String(format: "%02d:%02d:%02d", arguments: [h, m, s])
print(dateString)
// 可以直接在格式字符串后面添加 参数,用 逗号分隔
let dateString2 = String(format: "%02d:%02d:%02d", h, m, s)
print(dateString2)
}
1.5 可选项的拼接
-
如果变量是可选项,拼接的结果中会有 Optional
-
为了应对强行解包存在的风险,苹果提供了 ?? 操作符
-
?? 操作符用于检测可选项是否为 nil
let str1 = "Hello" let str2 = "World" let i: Int? = 32 str = "\(i ?? 0) 个 " + str1 + " " + str2
1.6 Swift的截取
// 字符串的子串,提示:在 Swift 中 String 取子串不是特别好写,建议使用 NSString
func demo5() {
let str = "hello world"
let s1 = (str as NSString).substringWithRange(NSMakeRange(2, 5))
print(s1)
}
2. 数组
2.1 数组的定义
-
数组使用 [] 定义,这一点与 OC 相同
-
数字不需要包装成NSNumber
-
结构体需要包装成NSValue
-
数组存放相同类型的情况多, 数组是通过下标来遍历的
func demo1(){ let arr = ["zhangsan", "lisi", 18, NSValue(CGPoint: CGPointMake(100, 100))] print(arr); }
2.2 遍历
for num in numbers {
print(num)
}
2.3 通过下标获取指定项内容
let num1 = numbers[0]
let num2 = numbers[1]
2.4 可变&不可变数组
-
let 定义不可变数组
-
var 定义可变数组
let array = ["zhangsan", "lisi"] //: 不能向不可变数组中追加内容 //array.append("wangwu") var array1 = ["zhangsan", "lisi"] //: 向可变数组中追加内容 array1.append("wangwu")
2.5 数组的类型
-
如果初始化时,所有内容类型一致,则数组中保存的是该类型的内容
-
如果初始化时,所有内容类型不一致,则数组中保存的是 NSObject
//: array1 仅允许追加 String 类型的值 //array1.append(18) var array2 = ["zhangsan", 18] //: 在 Swift 中,数字可以直接添加到集合,不需要再转换成 `NSNumber` array2.append(100) //: 在 Swift 中,如果将结构体对象添加到集合,仍然需要转换成 `NSValue` array2.append(NSValue(CGPoint: CGPoint(x: 10, y: 10)))
func demo2(){
// 这个时候编译器会自动推导出我们的arr是一个string类型的数组
var arr:[AnyObject] = ["zhangsan", "lisi"];
arr.append("123")
print(arr);
/* ERR: 因为我们的数组是string类型 , 我们追加123
是Int类型的, 类型不匹配var arr:[AnyObject] = ["zhangsan", "lisi"]
这样就可以追加了
arr.append(123)
print(arr)
*/
}
2.6 数组的定义和实例化
-
使用 : 可以只定义数组的类型
-
实例化之前不允许添加值
-
使用 类型可以实例化一个空的数组
var array3: [String] //: 实例化之前不允许添加值 //array3.append("laowang") //: 实例化一个空的数组 array3 = [String]() array3.append("laowang")
2.7 数组的合并
- 必须是相同类型的数组才能够合并
- 开发中,通常数组中保存的对象类型都是一样的!
/// 数组的合并
func demo10() {
var array: [NSObject] = ["张三", "lisi"]
let array2: [NSObject] = ["网舞", "赵丽"]
let array3 = ["小李", 18]
// 目标 array2 合并到 array 中
array += array2
// 注意:在合并数组的时候,数组的类型必须保持一致
array += array3
print(array)
}
2.8 数组的操作
// 数组的基本操作 - 增/删/改
func demo4() {
var array = ["zhangsan", "lisi"]
// 增加
array.append("wangwu")
print(array)
// 修改 - 通过下标获取元素,然后进行修改
array[0] = "zhaoliu"
print(array)
// 删除 - 删除第一个
array.removeFirst()
print(array)
// 删除最后一个
array.removeLast()
print(array)
// 删除所有元素,并且保留容量
array.removeAll(keepCapacity: true)
print(array)
print("数组容量 \(array.capacity)")
}
2.9 内存分配
-
如果向数组中追加元素,超过了容量,会直接在现有容量基础上 * 2
// 测试数组容量 func demo5() { // 定义一个存放字符串的数组,并没有分配控件 var array: [String] // 分配空间 array = [String]() for i in 0..<16 { array.append("张三 \(i)") // 当插入元素时,如果容量不够,会在当前容量基础上 * 2,方便后续的元素的增加 print(array[i] + " - 容量 \(array.capacity)") } print(array) }
3. 字典
3.1 定义
- 同样使用 [] 定义字典
- let 不可变字典, var 可变字典
- [String : NSObject] 是最常用的字典类型
// [String(key) : NSObject(value)]
let dict = ["name": "小花", "age": 18]
print(dict)
3.2 字典赋值
-
赋值直接使用 dict[key] = value 格式
-
如果 key 不存在,会设置新值
-
如果 key 存在,会覆盖现有值
//: * 如果 key 不存在,会设置新值 dict["title"] = "boss" //: * 如果 key 存在,会覆盖现有值 dict["name"] = "lisi"
3.3 字典的遍历
- k,v 可以随便写
- 前面的是 key, 后面的是 value
func demo8() {
/**
let 是不可变
var 是可变
*/
var dict = ["name": "小花", "age": 18]
// 如果 key 存在,值覆盖
dict["name"] = "小草"
// 如果 key 不存在,新增
dict["title"] = "老大"
print(dict)
// 遍历
/** k, v 是随便写的
前面的是 key
后面的是 value
*/ for (key, value) in dict {
print("KEY \(key) --- VALUES \(value)")
}
}
3.4 字典的合并
如果 key 不存在,会建立新值,否则会覆盖现有值
//: 合并字典
var dict1 = [String: NSObject]()
dict1["nickname"] = "大老虎"
dict1["age"] = 100
//: 如果 key 不存在,会建立新值,否则会覆盖现有值
for (k, v) in dict1 {
dict[k] = v
}
print(dict)
文/greedyDoor(简书作者)原文链接:http://www.jianshu.com/p/29eac03aa695著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
网友评论