4. Swift 字符串数组字典元组.png

基础数据类型中,我们经常跟字符串、数组、字典、元组打交道,所以我们重点讲下它们

字符串

字符串的方法汇总:长度、拼接、查找、替换、截取、分割、获取指定位置的字符、去掉首尾空白字符、格式化、转大写、转小写等方法

  1. var text = "Hello"

获取字符串长度

  1. let length: Int = text.count

判断字符串是否为空

  1. let isEmpty: Bool = text.isEmpty

字符串拼接

  1. let helloWorld = text + ", World"

字符串拼接,值改变

  1. text += ", World"
  1. text.append(", World")

判断字符串是否相等

  1. let isEqual: Bool = text == "Hello"

字符串强转整型

  1. Int("10")

判断字符串是否包含前缀

  1. text.hasPrefix("He")

判断字符串是否包含后缀

  1. text.hasSuffix("s")

字符串遍历

  1. for i in text {
  2. print(i)
  3. }

Swift 的 String API (当前最新版本 5.1)不是很友好,像获取字符串中某个位置的字符、判断字符串是否包含子字符串、字符串格式化等功能缺失。我们可以通过将 Swift 的 String 转换成 Objective-C 的 NSString,使用 OC 的字符串API

  1. import Foundation
  2. extension String {
  3. // 字符串扩展方法:判断字符串是否包含子字符串
  4. func contains(_ substring: String) -> Bool {
  5. return (self as NSString).contains(substring)
  6. }
  7. }
  1. import Foundation
  2. let sql = """
  3. SELECT *
  4. FROM user
  5. WHERE name = %@;
  6. """
  7. let name = "'huangjian'"
  8. print(String(format:sql, arguments:[name]))

备注:[swift.org] [apple.com] [Swift 的字符串比较难用1 😓] [Swift 的字符串比较难用2 😓] [分割] [截取]

数组

基本用法

  1. // 创建数组
  2. var array: Array<String> = ["apple", "orange", "pear"]
  3. var array: [String] = ["apple", "orange", "pear"]
  4. var array = [String]()
  5. // 追加元素
  6. array.append("banana")
  7. // 追加(合并)数组
  8. array += ["watermelon", "peach"]
  9. // 插入元素
  10. array.insert("jujube", at: 1)
  11. // 修改元素
  12. array[0] = "grape"
  13. // 删除元素
  14. array.remove(at: array.count - 1)
  15. // 判断是否包含子元素
  16. print(array.contains("apple"))
  17. // 按字符合并数组
  18. print(array.joined(separator: ","))
  19. // 判断是否为空数组
  20. print(array.isEmpty)
  21. // 获取元素个数
  22. print(array.count)
  23. // 遍历数组
  24. for index in 0..<array.count {
  25. print(array[index])
  26. }
  27. for index in array.startIndex..<array.endIndex {
  28. print(array[index])
  29. }
  30. for element in array {
  31. print(element)
  32. }
  33. for (index, element) in array.enumerated() {
  34. print(index, element)
  35. }

删除元素

  1. import Foundation
  2. var array: Array<String> = ["apple", "orange", "pear"]
  3. print(array.first!, array.last!)
  4. // 删除最后几个元素,未指定则为 1,生成新的数组
  5. let newArray = array.dropLast(2)
  6. print(newArray)
  7. // 删除数组本身的最后一个元素,返回被删除的最后一个元素
  8. let popElement = array.popLast()
  9. print(popElement!)
  10. // 删除数组本身的最后一个元素,返回被删除的最后一个元素
  11. let removeElement = array.removeLast()
  12. print(removeElement as Any)
  13. // 删除指定区间的元素
  14. array.removeSubrange(Range.init(NSMakeRange(0, 2))!)
  15. print(array)

高级用法

转字符串 array``.joined
遍历 array``.forEach
排序 array``.sort
过滤 array``.filter
映射 array``.map 可改变数组存储的数据类型
其他映射 array``.flatMap 过滤 nil 值;将多维数组变成一维数组;强制解析可选值
其他映射 array``.compactMap 过滤 nil 和可选值

等等

备注:[数组]

字典

基本用法

  1. var dict: Dictionary<String, String> = [:]
  2. var dict: [String: String] = [:]
  3. dict["name"] = "huangjian"
  4. dict["age"] = "18"
  5. dict["id"] = "10001"
  6. dict["address"] = "China"
  7. print(dict, dict.isEmpty, dict["name"] as Any, dict["age"] as Any)
  8. let oldValue1 = dict.updateValue("20", forKey: "age")
  9. let oldValue2 = dict.updateValue("male", forKey: "sex")
  10. let removeValue = dict.removeValue(forKey: "sex")
  11. print(dict)
  12. print(dict.keys)
  13. print(dict.values)
  14. print(dict.count)
  15. var result = dict.mapValues { (value) -> String in
  16. return "v-\(value)"
  17. }
  18. print(result)
  19. for (key, value) in dict {
  20. print(key, value)
  21. }

高级用法

  1. dict.merge(["address": "HongKong"]) { (value1, value2) -> String in
  2. return value1
  3. }
  4. print(dict)
  5. var sortedDict = dict.sorted { (arg0, arg1) -> Bool in
  6. return arg0.key < arg1.key
  7. }
  8. var json = "{\n"
  9. for (index, item) in sortedDict.enumerated() {
  10. json += "\t\"\(item.key)\": \"\(item.value)\""
  11. if index != sortedDict.count - 1 {
  12. json += ",\n"
  13. }
  14. }
  15. json += "\n}"
  16. print(json)

元组

元组一般应用到函数的返回值

  1. let tuple = (404, "Not Found")
  2. print(tuple.0)
  3. print(tuple.1)
  1. let tuple = (name: "huangjian", age: 20)
  2. // 取值
  3. print(tuple.0, tuple.name)
  4. print(tuple.1, tuple.age)
  5. // 解构
  6. let (width, _) = (width: 100, height: 200)
  7. print(width)

注意:Void == (),但此 () 与元组无关,比如 let value: Void = ()