swift-02-字符串、数组、字典、元组

637 阅读5分钟

最近在学习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)")
}

大小写:lowercaseduppercased

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)")