前言
接上篇, 這篇聊一下 Swift中的 字符串, 數(shù)組, 字典
一 字符串
字符串的長度
字符串的拼接
字符串格式化
字符串截取
// MARK: - 字符串遍歷
func strDemo1() -> () {
let str = "天朗氣清惠風和暢"
for s in str.characters {
print(s)
}
}
// MARK: - 字符串長度
func strDemo2() {
let str = "Hello World 01 中文"
// 1.返回指定編碼對應的字節(jié)數(shù)量 (UTF8 中文3字節(jié))
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)) // 輸出: 標兵
}
二 數(shù)組
定義
遍歷
增/刪/改
合并
// MARK: - 數(shù)組定義
func arrDemo1() -> () {
// 自動推導的結果 [String] -> 表示數(shù)組中存放的都是 String
let strArr = ["張三", "李四", "王五"]
print(strArr)
// 定義初始化一個空的 字符串數(shù)組
var strArr2 = [String]()
print(strArr2)
}
// MARK: - 數(shù)組遍歷
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: - 數(shù)組的增 刪 改
func arrDemo3() -> () {
// OC 中可變數(shù)組 NSMutableArray (var) ; 不可變 NSArray (let)
var arr = ["張三", "李四", "王五"]
// 增加元素
arr.append("Tom")
print(arr) // 輸出: ["張三", "李四", "王五", "Tom"]
// 修改元素, 通過下標定位
arr[0] = "??"
print(arr) //輸出: ["??", "李四", "王五", "Tom"]
// 數(shù)組越界 -- 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: - 數(shù)組合并
func arrDemo4() -> () {
var arr = ["張三", "李四", "王五"]
let arr0 = ["Tom", "Jake", "Bob"]
arr += arr0
print(arr) // 輸出: ["張三", "李四", "王五", "Tom", "Jake", "Bob"]
/** 注意 : 合并的數(shù)組類型必須一致 */
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" : "總監(jiān)"]
// 元祖 (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": "市長"]
}
下篇可以介紹下 函數(shù), 閉包
以 上 !