前言
接上篇, 这篇聊一下 Swift中的 字符串, 数组, 字典
一 字符串
字符串的长度
字符串的拼接
字符串格式化
字符串截取
// MARK: - 字符串遍历
func strDemo1() -> () {
let str = "天朗气清惠风和畅"
for s in str.characters {
print(s)
}
}
// MARK: - 字符串长度
func strDemo2() {
let str = "Hello World 01 中文"
// 1.返回指定编码对应的字节数量 (UTF8 中文3字节)
print("utf8编码长度 :", str.lengthOfBytes(using: String.Encoding.utf8)) // 输出: utf8编码长度 : 21
// 2.字符串长度
print("字符串长度 :", str.characters.count) // 输出: 字符串长度 : 17
// 3.使用NSString 中转
let strOC = str as NSString
print("NSString转换 :", strOC.length) // 输出: NSString转换 : 17
}
// MARK: - 字符串拼接
func strDemo3() -> () {
// OC 中用 [NSString stringWithFormat:xxx]
let name = "小明"
let age = 20
let level = "BOSS"
// 使用 '\(变量/常量名)' 的方式可以快速拼接字符串
let str = "姓名: \(name) 年龄: \(age) 职位: \(level)"
print(str) // 输出: 姓名: 小明 年龄: 20 职位: BOSS
}
// MARK: - 格式化
func strDemo4() -> () {
let h = 8
let m = 10
let s = 30
let strDate = "\(h) : \(m) : \(s)"
print(strDate) // 输出 : 8 : 10 : 30
// 使用字符串格式化
let strFormat = String(format: "%@ %02d: %02d: %02d", "时间", h, m, s)
print(strFormat) // 输出 :时间 08: 10: 30
}
// MARK: - 字符串截取
func strDemo5() -> () {
let str = "三百标兵奔北坡"
// 1. NSString 中转
let strOC = str as NSString
let result = strOC.substring(with: NSMakeRange(4, 3))
print(result) // 输出: 奔北坡
// 2. Range<String.Index>
let starIndex = "1234".endIndex
let endIndex = "1234567".endIndex
let range = starIndex..<endIndex
let subStr = str.substring(with: range)
// let subStr = str.substring(with: "1234".endIndex..<"1234567".endIndex)
print(subStr) // 输出: 奔北坡
// 3 取子字符串的范围
guard let range1 = str.range(of: "标兵") else {
return
}
print(range1)
print(str.substring(with: range1)) // 输出: 标兵
}
二 数组
定义
遍历
增/删/改
合并
// MARK: - 数组定义
func arrDemo1() -> () {
// 自动推导的结果 [String] -> 表示数组中存放的都是 String
let strArr = ["张三", "李四", "王五"]
print(strArr)
// 定义初始化一个空的 字符串数组
var strArr2 = [String]()
print(strArr2)
}
// MARK: - 数组遍历
func arrDemo2() -> () {
let arr = ["张三", "李四", "王五"]
//1. 按照下标遍历
print("-- 按照下标遍历 --")
for i in 0..<arr.count {
print(arr[i])
}
//2. for in 遍历元素
print("-- for in 遍历元素 --")
for s in arr {
print(s)
}
//3. enum block 遍历, 同时遍历下标和内容
print("-- enum block 遍历, 同时遍历下标和内容 --")
// 元组
for e in arr.enumerated() {
print(e)
print("\(e.offset) + \(e.element)")
}
//4. 遍历下标和内容2
print("-- 遍历下标和内容2 --")
for (n, s) in arr.enumerated() {
print("\(n) => \(s)")
}
//5. 反序遍历
print("-- 反序遍历 --")
for s in arr.reversed() {
print(s)
}
//6. 反序索引&内容
print("-- 反序索引&内容 --")
for (n, s) in arr.enumerated().reversed() {
print("\(n) \(s)")
}
print("-- 错误反序 索引&内容 不一致. reversed一定要最后写 --")
for (n, s) in arr.reversed().enumerated() {
print("\(n) \(s)")
}
}
// MARK: - 数组的增 删 改
func arrDemo3() -> () {
// OC 中可变数组 NSMutableArray (var) ; 不可变 NSArray (let)
var arr = ["张三", "李四", "王五"]
// 增加元素
arr.append("Tom")
print(arr) // 输出: ["张三", "李四", "王五", "Tom"]
// 修改元素, 通过下标定位
arr[0] = "🐝"
print(arr) //输出: ["🐝", "李四", "王五", "Tom"]
// 数组越界 -- Index out of range
// arr[5] = "xxx"
// print(arr)
// 删除元素
arr.remove(at: 3)
print(arr) // 输出: ["🐝", "李四", "王五"]
// 删除全部, 并保留空间
arr.removeAll(keepingCapacity:true)
print("\(arr) \(arr.capacity)") // 输出: [] 6
}
// MARK: - 数组合并
func arrDemo4() -> () {
var arr = ["张三", "李四", "王五"]
let arr0 = ["Tom", "Jake", "Bob"]
arr += arr0
print(arr) // 输出: ["张三", "李四", "王五", "Tom", "Jake", "Bob"]
/** 注意 : 合并的数组类型必须一致 */
var array = ["第一", "第二", "第三"] as [Any]
// Any
let array0 = ["金牌", 2, 3] as [Any]
// array = array0 + array // array0 在前拼接
array = array + array0 // 等价于 array += array0
print(array) // 输出: ["第一", "第二", "第三", "金牌", 2, 3]
}
三 字典
// MARK: - 定义
func dicDemo1() -> () {
// OC 定义字典使用{}, Swift中使用 []
// [key : value] => [String : String]
let dic = ["name" : "张三",
"age" : "18"]
print(dic) // 输出: ["name": "张三", "age": "18"]
let dic0 = ["name" : "李四", "age" : 28 ] as [String : Any]
// let dic0 : [String : Any] = ["name" : "李四", "age" : 28]
print(dic0) // 输出: ["name": "李四", "age": 28]
}
// MARK: - 遍历
func dicDemo2() -> () {
let dic : [String : Any] = ["name" : "Tom", "age" : 18, "level" : "总监"]
// 元祖 (key: String, value: Any)
for e in dic {
print("key :\(e.key) value : \(e.value)")
}
print("----------------")
// 前面是key, 后面是value, 名字可以随便起, OC用 for in 只能获取 key
for (k, v) in dic {
print("\(k) \(v)")
}
}
// MARK: - 增/删/改
func dicDemo3() -> () {
// 可变 var / 不可变 let
var dic = ["name" : "张三", "age" : 48] as [String : Any]
//添加 -- 如果 key 不存在, 就是新增
dic["level"] = "总裁"
print(dic)
//修改 -- 如果 key 存在, 就是修改 (字典中是通过 key 取值, key在字典中必须是唯一的)
dic["age"] = 30
print(dic)
// 删除 -- 直接给定 key
dic.removeValue(forKey: "level")
print(dic)
}
// MARK: - 合并
func dicDemo4() -> () {
var dic = ["name" : "张三", "age" : 48] as [String : Any]
let dic0 = ["name" : "Tom", "level" : "市长", "height" : 182] as [String : Any]
/**
字典不能直接相加
如果 key 存在, 就修改value
如果 key 不存在, 就增加
*/
for e in dic0 {
dic[e.key] = dic0[e.key]
}
print(dic) //输出: ["name": "Tom", "age": 48, "height": 182, "level": "市长"]
}
下篇可以介绍下 函数, 闭包
以 上 !