數(shù)組
創(chuàng)建一個數(shù)組,可變的空數(shù)組,打印結(jié)果為
[]
var arr1 = [String]()
print(arr1)
以字面量初始化一個數(shù)組:
var arr1: [String] = ["wang66", "wang77", "wang88"]
print(arr1)
因?yàn)镾wift有類型檢測,所以不用申明數(shù)組類型也完全可以,它會根據(jù)所賦的字面值自己推斷未
String類型
var arr1 = ["wang66", "wang77", "wang88"]
print(arr1)
給數(shù)組追加新的元素:
var arr1: [String] = ["wang66", "wang77", "wang88"]
arr1.append("wang99")
print(arr1)
給數(shù)組追加新的數(shù)組:
var arr1: [String] = ["wang66", "wang77", "wang88"]
arr1 += ["wang99", "wang00"]
print(arr1)
將倆數(shù)組拼接。在Swift中字符串和集合拼接都用
+號就行
var arr1: [String] = ["wang66", "wang77", "wang88"]
var arr2 = ["wang99", "wang00"]
var resultArr = arr1 + arr2
print(res ultArr)
對數(shù)組進(jìn)行刪除操作。下面幾個刪除方法均有返回值,返回被刪除的數(shù)組元素。通常情況下你不用管返回值。
var arr1: [String] = ["wang66", "wang77", "wang88"]
arr1.removeLast()
arr1.removeFirst()
let deletedElement = arr1.remove(at: 0)
print(deletedElement)
print(arr1)
修改、更新數(shù)組元素。你不僅可以通過下標(biāo)索引修改一個元素,也可以批量修改。
var arr1: [String] = ["wang66", "wang77", "wang88"]
arr1[0] = "Jobs"
arr1[1...2] = ["Yaren", "Tom"] // 根據(jù)下標(biāo)區(qū)間,批量修改
print(arr1)
讀取數(shù)組。
let str0 = resultArr[0]
print(str0)
let strFirst = resultArr.first
if let tempStr = strFirst{
print(tempStr)
}
print(strFirst!)
let strLast = resultArr.last
print(strLast!)
數(shù)組中插入元素
var arr1: [String] = ["wang66", "wang77", "wang88"]
arr1.insert("wang00", at: 0)
print(arr1)
遍歷數(shù)組。當(dāng)需要數(shù)組索引時,可以用
enumerated()遍歷得到一個個元組,index即為索引,value即為元素的值。
// 遍歷數(shù)組
for item in resultArr {
print(item)
}
for (index, value) in resultArr.enumerated() {
print("item=\(index), value=\(value)")
}
字典
字典的用法和數(shù)組很相似。
創(chuàng)建一個字典。一個key和value均為
String類型的字典,隨即設(shè)置字符串"wang1"為鍵"name"的值
var dict1 = [String:String]()
dict1["name"] = "wang1"
print(dict1)
以字面量初始化一個字典。鍵值均為
String類型,且已有兩個鍵name和age。
var dict2: [String:String] = ["name":"wang1", "age":"23"]
print(dict2)
與數(shù)組類似的,它也完全可以不必申明鍵值類型,Swift會自己檢測
var dict3 = ["name":"wang1"]
print(dict3)
修改、更新鍵值。也提供了
updateValue(value: forkey:)方法,它有返回值,代表被修改的鍵的原始值。一般可忽略該返回值。
var dict = ["name":"wang66", "age":"24"]
dict["age"] = "18"
let result = dict.updateValue("wang666", forKey: "name")
print(result!)
print(dict)
刪除字典元素,刪除某鍵對應(yīng)的數(shù)據(jù)。
var dict = ["name":"wang66", "age":"24"]
dict.removeValue(forKey: "age")
print(dict)
遍歷字典。遍歷字典時是一個個的元組。
// 遍歷
for (dictKey, dictValue) in dict1 {
print("\(dictKey)=\(dictValue)")
}
// 遍歷所有key
for key in dict1.keys {
print("key=\(key)")
}
// 遍歷所有values
for value in dict2.values {
print("value=\(value)")
}
枚舉
在OC中可以把枚舉理解為取了個別名的整型數(shù)。但是Swift的枚舉卻發(fā)生了很大變化,它可以是任意類型。應(yīng)該這么說,定義了一個枚舉,就是定義了一個類型,它里面的成員的類型就是該枚舉,它有點(diǎn)類似類和結(jié)構(gòu)體的感覺。 比如下面定義了一個
PositionType枚舉,對于它的成員north,south...來說,它們的類型就是PositionType。
enum PositionType {
case north
case south
case east
case west
}
使用時直接用點(diǎn)語法就可以了。當(dāng)通過點(diǎn)語法將枚舉值賦給
direction時,Swift便會推斷出其類型,所以再后續(xù)操作direction時,甚至可以省略枚舉名了,直接用點(diǎn)語法點(diǎn)出它的成員來。
var direction = PositionType.north
direction = .east
print(direction)
// log:east
Swift中可以給枚舉的成員設(shè)置“原始值”,所有成員的原始值的類型必須相同。下面這個叫
BallType的枚舉,它的成員原始值都是String類型的。
enum BallType: String {
case basketball = "BB"
case football = "FB"
case golfball = "GB"
}
現(xiàn)在給枚舉的成員已然設(shè)置了“原始值”,那我們怎么獲取“原始值”呢?——通過成員的
rawValue方法。
let rawValue = BallType.basketball.rawValue
print(rawValue)
** 枚舉的隱式賦值:**雖說Swift中的枚舉成員不像OC那樣,默認(rèn)第一個成員值為0,然后依次遞增。Swift的枚舉成員默認(rèn)是沒值的,更不用說值遞增了。但是,若你手動的給第一個成員設(shè)置一個值,那此時,它后面的成員便會遞增。
定義一個分?jǐn)?shù)等級的枚舉。將第一個成員D手動賦值為1。
// 分?jǐn)?shù)等級
enum ScoreLevel: Int {
case D = 1
case C
case B
case A
}
獲取成員B的值,打印結(jié)果可以看到B的值為3。
let score = ScoreLevel.B.rawValue
print(score)
// log:3