最近在学习swift,期间也看了很多教程和大神的博客,最后把笔记放这里,方便查看复习~
附上学习资料地址:w3cschool-Swift 教程 、 YungFan大神的简书(推荐看一下,有些知识点总结地简直通俗易懂)
一、字符串&字符
1、字符串
1.1、介绍
Swift中字符串类型是 String
,它是一个结构体,性能更高。支持遍历
1.2、初始化
不可变字符串:let
修饰
let str = "hello Objective-C"
可变字符串:var
修饰
var str = "hello Swift"
多行字符串
var str = """
静夜思
作者:李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
含义转义字符串
/*
如果字符串中包含 反斜杠”\“,有两种方式解决:
1、两个反斜杠
2、双引号外面加 #
*/
//1、两个反斜杠
let str = "字符串中有\\转义字符反斜杠\\"
//2、双引号外面加 #
let str = #"字符串中有\转义字符反斜杠\"#
1.3、常用操作
长度:count
或者 length
let str = "12345678"
let len1 = str.count //8
let len2 = (str as NSString).length //8
拼接:+
或者 append
let str1 = "abc" + "cde"
var str2 = "abc"
str2.append("cde")
遍历:
//写法1
let str = "abcdefg"
for char in str {
print(char)
}
//写法2
let str = "abcdefg"
for (index, value) in str.enumerated() {
print("\(index) --- \(value)")
}
大小写:lowercased
、uppercased
let str = "abcdefg"
//全部小写
print(str.lowercased())
//全部大写
print(str.uppercased())
是否包含字符串:contains
let str = "abcdefg"
print(str.contains("cd")) //true
print(str.contains("c")) //true
print(str.contains("o")) //false
分割:components
let str = "abcdefg$$aaaa$$bbbb$$ccc"
//很明显分割完是个数组
let desc = str.components(separatedBy: "$$")
for item in desc {
print(item)
}
替换:replacingOccurrences
let str = "abcdefg$$aaaa$$bbbb$$ccc"
let dest = str.replacingOccurrences(of: "$$", with: "**")
print(dest)
截取子串:
//写法1:常规写法
let str = "Hello World"
//截取某字符串的前5个字符串
let sub1 = str.prefix(5)
print(sub1)
//截取某字符串的后5个字符串
let sub2 = str.suffix(5)
print(sub2)
//写法2,取下标范围
let str = "Hello World"
//截取某字符串的前5个字符串
//先拿到从第一个字符开始,往后 5个字符的下标
let index1 = str.index(str.startIndex, offsetBy: 5)
let sub1 = str[str.startIndex..<index1]
print(sub1)
//截取某字符串的后5个字符串
//先拿到从最后一个字符开始,往前 5个字符的下标
let index2 = str.index(str.endIndex, offsetBy: -5)
let sub2 = str[index2..<str.endIndex]
print(sub2)
2、字符
字符,就是单字符
let char: Character = "A"
注意:
- 多字符会报错
- 空字符会报错
二、数组
1、介绍
Swift用 Array
表示数组,是一个泛型集合,它是一个结构体,它里面的元素是有序的
,可重复出现
2、初始化
不可变数组:let
修饰
let array : [Any] = ["zhangsan", 18]
可变数组:var
修饰
// 定义一个可变数组,必须初始化才能使用
var array : [String] = [String]()
初始化格式 (var
可以换成let
)
///直接初始化
//常规写法
var array1: Array<Any> = ["zhangsan", 18]
//简写
var array2: [Any] = ["zhangsan", 18]
//如果元素类型一致,也可以这么写
var array3 = ["zhangsan", "lisi"]
///先声明,再初始化
var array4: Array<Any>
array4 = ["zhangsan", "18"]
空数组初始化
//写法1
var emptyArray = [String]()
//写法2:如果类型信息可以被推断,可以这么写
var emptyArray = []
初始化一个Int类型、大小为3、默认值都为0的数组
var array = [Int](repeating: 0, count: 3)
print(array) //[0, 0, 0]
3、常用操作
长度
array.count
长度
array.isEmpty
增加数据
array.append("zhaoliu")
插入数据
array.insert("haojian", at: 0)
修改数据
array[0] = "wangqi"
查找数据:取值
array[1]
array.first
倒序
array.reverse()
合并:+
//建议:同类型的数组进行合并
let array1 = ["zhang", "wang", "li", "zhao"]
let array2 = ["san", "si", "wu"]
let array3 = array1 + array2
print(array3)
//打印:["zhang", "wang", "li", "zhao", "san", "si", "wu"]
容量:capacity
// 初始化数组的容量为0 如果发现容量不够 会在现有的容量上*2 (如果原本容量为0,会+2)
var array = [Int]()
for i in 0..<8 {
array.append(i)
print("\(array)\(array.capacity)")
}
4、遍历
普通遍历
for i in 0..<array.count {
print(array[i])
}
for-in
方式
for item in array {
print(item)
}
区间遍历
//0、1
for item in array[0..<2] {
print(item)
}
元组遍历
let array = ["zhang", "wang", "li", "zhao", "zhou"]
for (index, name) in array.enumerated() {
print("\(index) == \(name)")
}
/*
打印:
0 == zhang
1 == wang
2 == li
3 == zhao
4 == zhou
*/
三、字典
1、介绍
Swift中的字典类型是Dictionary
,也是一个泛型集合。它元素之间是无序的
,健
不可重复出现,其他与oc类似
2、初始化
不可变字典:let
修饰
//常规写法
let dict1: Dictionary<String, Any> = ["age": 18,"name": "zhangsan"]
//简写
let dict2: [String : Any] = ["age": 18,"name": "zhangsan"]
//如果省略类型,就要在后面加上 as
let dict3 = ["age": 18,"name": "zhangsan"] as [String : Any]
可变字典:var
修饰
//常规写法
var dict1: Dictionary<String, Any> = ["age": 18,"name": "zhangsan"]
//简写
var dict2: [String : Any] = ["age": 18,"name": "zhangsan"]
//如果省略类型,就要在后面加上 as
var dict3 = ["age": 18,"name": "zhangsan"] as [String : Any]
//空字典1
var dict4 = [String : int]()
//空字典2
var dict5 = [:]
3、常用操作
长度
dict.count
判空
dict.isEmpty
增加数据
var dict = [String : Int]()
dict["height"] = 18
dict["weight"] = 20
print(dict)
删除数据
//方式1
dict.removeValue(forKey: "height")
//方式2
dict["height"] = nil
修改数据
//方式一
dict["height"] = 55
//方式二
dict.updateValue(99, forKey: "weight")
查询数据
// 可选型
dict["name"]
合并
//同样要同类型的,但不能和数组一样用+号
var dict1: [String : Any] = ["name" : "zhangsan", "age" : 20]
var dict2: [String : Any] = ["height" : 180, "phone" : "18888888888"]
//其实就是把dict2的内容添加到dict1中
for (key, value) in dict2 {
dict1[key] = value
}
print(dict1)
//打印:["height": 180, "name": "zhangsan", "phone": "18888888888", "age": 20]
4、遍历
遍历字典中所有的值
for value in dict.values {
print(value)
}
遍历字典中所有的键
for key in dict.keys {
print(key)
}
遍历所有的键值对
//常用
for (key, value) in dict {
print("\(key) == \(value)")
}
枚举方式遍历
var dict: [String : Any] = ["name" : "zhangsan", "age" : 20, "height" : 180, "phone" : "18888888888"]
//注意:这样输出的不是key-value,而是索引和(key:value)
for (index, value) in dict.enumerated() {
print("\(index) == \(value)")
}
/*
打印:
0 == (key: "phone", value: "18888888888")
1 == (key: "age", value: 20)
2 == (key: "name", value: "zhangsan")
3 == (key: "height", value: 180)
*/
四、元组
1、介绍
Swift中特有一种 数据结构
,可以用于定义一组数据,组成元组的数据可以称为 元素
2、定义
常见写法
//使用元组 来描述一个人的信息
var one = ("zhangsan", 20, "1888888888",180)
//这个元组的元素的类型,分别是:String,Int,String,Int
给元素加上名字
var one = (name: "zhangsan", age: 20, phone: "1888888888",height: 180)
//这个就可以通过one.name拿到数据
3、简单使用
用元组来描述一个http错误信息
// 写法一:
let error = (404, "Not Found")
//下标访问
print(error.0)
print(error.1)
// 写法二:
let error = (errorCode : 404, errorInfo : "Not Found")
//别名访问
print(error.errorCode)
print(error.errorInfo)
// 写法三:
//定义元组变量接收元素的值
let (errorCode, errorInfo) = (404, "Not Found")
print(errorCode)
print(errorInfo)
组合,拆解
//组合
let httpError = (404,"NotFound")
//拆解
let (str1,str2) = httpError
print("第一个参数是\(str1)")
print("第二个参数是\(str2)")
//只拆一个
let (str3,_) = httpError
print("参数是\(str3)")
//根据索引拆
print("索引第一个参数是\(httpError.0)")
//给元组数据命名
let httpStatus = (status:200,des:"成功")
print("打印元组的status:\(httpStatus.status)")
print("打印元组的des:\(httpStatus.des)")