基础数据类型中,我们经常跟字符串、数组、字典、元组打交道,所以我们重点讲下它们
字符串
字符串的方法汇总:长度、拼接、查找、替换、截取、分割、获取指定位置的字符、去掉首尾空白字符、格式化、转大写、转小写等方法
var text = "Hello"
获取字符串长度
let length: Int = text.count
判断字符串是否为空
let isEmpty: Bool = text.isEmpty
字符串拼接
let helloWorld = text + ", World"
字符串拼接,值改变
text += ", World"
text.append(", World")
判断字符串是否相等
let isEqual: Bool = text == "Hello"
字符串强转整型
Int("10")
判断字符串是否包含前缀
text.hasPrefix("He")
判断字符串是否包含后缀
text.hasSuffix("s")
字符串遍历
for i in text {
print(i)
}
Swift 的 String API (当前最新版本 5.1)不是很友好,像获取字符串中某个位置的字符、判断字符串是否包含子字符串、字符串格式化等功能缺失。我们可以通过将 Swift 的 String 转换成 Objective-C 的 NSString,使用 OC 的字符串API
import Foundation
extension String {
// 字符串扩展方法:判断字符串是否包含子字符串
func contains(_ substring: String) -> Bool {
return (self as NSString).contains(substring)
}
}
import Foundation
let sql = """
SELECT *
FROM user
WHERE name = %@;
"""
let name = "'huangjian'"
print(String(format:sql, arguments:[name]))
备注:[swift.org] [apple.com] [Swift 的字符串比较难用1 😓] [Swift 的字符串比较难用2 😓] [分割] [截取]
数组
基本用法
// 创建数组
var array: Array<String> = ["apple", "orange", "pear"]
var array: [String] = ["apple", "orange", "pear"]
var array = [String]()
// 追加元素
array.append("banana")
// 追加(合并)数组
array += ["watermelon", "peach"]
// 插入元素
array.insert("jujube", at: 1)
// 修改元素
array[0] = "grape"
// 删除元素
array.remove(at: array.count - 1)
// 判断是否包含子元素
print(array.contains("apple"))
// 按字符合并数组
print(array.joined(separator: ","))
// 判断是否为空数组
print(array.isEmpty)
// 获取元素个数
print(array.count)
// 遍历数组
for index in 0..<array.count {
print(array[index])
}
for index in array.startIndex..<array.endIndex {
print(array[index])
}
for element in array {
print(element)
}
for (index, element) in array.enumerated() {
print(index, element)
}
删除元素
import Foundation
var array: Array<String> = ["apple", "orange", "pear"]
print(array.first!, array.last!)
// 删除最后几个元素,未指定则为 1,生成新的数组
let newArray = array.dropLast(2)
print(newArray)
// 删除数组本身的最后一个元素,返回被删除的最后一个元素
let popElement = array.popLast()
print(popElement!)
// 删除数组本身的最后一个元素,返回被删除的最后一个元素
let removeElement = array.removeLast()
print(removeElement as Any)
// 删除指定区间的元素
array.removeSubrange(Range.init(NSMakeRange(0, 2))!)
print(array)
高级用法
转字符串 array``.joined
遍历 array``.forEach
排序 array``.sort
过滤 array``.filter
映射 array``.map
可改变数组存储的数据类型
其他映射 array``.flatMap
过滤 nil
值;将多维数组变成一维数组;强制解析可选值
其他映射 array``.compactMap
过滤 nil
和可选值
等等
备注:[数组]
字典
基本用法
var dict: Dictionary<String, String> = [:]
var dict: [String: String] = [:]
dict["name"] = "huangjian"
dict["age"] = "18"
dict["id"] = "10001"
dict["address"] = "China"
print(dict, dict.isEmpty, dict["name"] as Any, dict["age"] as Any)
let oldValue1 = dict.updateValue("20", forKey: "age")
let oldValue2 = dict.updateValue("male", forKey: "sex")
let removeValue = dict.removeValue(forKey: "sex")
print(dict)
print(dict.keys)
print(dict.values)
print(dict.count)
var result = dict.mapValues { (value) -> String in
return "v-\(value)"
}
print(result)
for (key, value) in dict {
print(key, value)
}
高级用法
dict.merge(["address": "HongKong"]) { (value1, value2) -> String in
return value1
}
print(dict)
var sortedDict = dict.sorted { (arg0, arg1) -> Bool in
return arg0.key < arg1.key
}
var json = "{\n"
for (index, item) in sortedDict.enumerated() {
json += "\t\"\(item.key)\": \"\(item.value)\""
if index != sortedDict.count - 1 {
json += ",\n"
}
}
json += "\n}"
print(json)
元组
元组一般应用到函数的返回值
let tuple = (404, "Not Found")
print(tuple.0)
print(tuple.1)
let tuple = (name: "huangjian", age: 20)
// 取值
print(tuple.0, tuple.name)
print(tuple.1, tuple.age)
// 解构
let (width, _) = (width: 100, height: 200)
print(width)
注意:Void == ()
,但此 ()
与元组无关,比如 let value: Void = ()