最近在學習swift,期間也看了不少教程和大神的博客,最後把筆記放這裏,方便查看複習~swift
附上學習資料地址:w3cschool-Swift 教程 、 YungFan大神的簡書(推薦看一下,有些知識點總結地簡直通俗易懂)數組
Swift中字符串類型是 String
,它是一個結構體,性能更高。支持遍歷markdown
不可變字符串:let
修飾數據結構
let str = "hello Objective-C"
複製代碼
可變字符串:var
修飾app
var str = "hello Swift"
複製代碼
多行字符串oop
var str = """
靜夜思
做者:李白
牀前明月光,疑是地上霜。
舉頭望明月,低頭思故鄉。
"""
複製代碼
含義轉義字符串性能
/*
若是字符串中包含 反斜槓」\「,有兩種方式解決:
一、兩個反斜槓
二、雙引號外面加 #
*/
//一、兩個反斜槓
let str = "字符串中有\\轉義字符反斜槓\\"
//二、雙引號外面加 #
let str = #"字符串中有\轉義字符反斜槓\"#
複製代碼
長度:count
或者 length
學習
let str = "12345678"
let len1 = str.count //8
let len2 = (str as NSString).length //8
複製代碼
拼接:+
或者 append
spa
let str1 = "abc" + "cde"
var str2 = "abc"
str2.append("cde")
複製代碼
遍歷:code
//寫法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)
複製代碼
字符,就是單字符
let char: Character = "A"
複製代碼
注意:
Swift用 Array
表示數組,是一個泛型集合,它是一個結構體,它裏面的元素是有序的
,可重複出現
不可變數組: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類型、大小爲三、默認值都爲0的數組
var array = [Int](repeating: 0, count: 3)
print(array) //[0, 0, 0]
複製代碼
長度
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)")
}
複製代碼
普通遍歷
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
*/
複製代碼
Swift中的字典類型是Dictionary
,也是一個泛型集合。它元素之間是無序的
,健
不可重複出現,其餘與oc相似
不可變字典: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 = [:]
複製代碼
長度
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]
複製代碼
遍歷字典中全部的值
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)
*/
複製代碼
Swift中特有一種 數據結構
,能夠用於定義一組數據,組成元組的數據能夠稱爲 元素
常見寫法
//使用元組 來描述一我的的信息
var one = ("zhangsan", 20, "1888888888",180)
//這個元組的元素的類型,分別是:String,Int,String,Int
複製代碼
給元素加上名字
var one = (name: "zhangsan", age: 20, phone: "1888888888",height: 180)
//這個就能夠經過one.name拿到數據
複製代碼
用元組來描述一個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)")
複製代碼