var someInts = [Int]()通過構造函數的類型,someInts的值類型被推斷為[Int]。如果代碼上下文中已經提供了類型信息,例如一個函數參數或者一個已經定義好類型的常量或者變量,我們可以使用空數組語句創建一個空數組,它的寫法很簡單:someInts = []創建一個帶有默認值的數組
swift中的Array類型還提供一個可以創建特定大小并且所有數據都被默認的構造方法。我們可以把準備加入新數組的數據項數量和適當類型的初始值傳入數組構造函數:var threeDoubles = Array(repeating:0,count:3)通過兩個數組相加創建一個數組
可以使用加法操作符來組合兩種已存在的相同類型數組。var anotherThreeDoubles = Array(repeating:2,count:3) var sixDoubles = threeDoubles + anotherThreeDoubles用數組字面量構造數組
可以使用數組字面量來進行數組構造,這是一種用一個或者多個數值構造數組的簡單方法。數組字面量是一系列由逗號分割并由方括號包含的數值:var shoppingList:[String] = ["Eggs","Milk"]由于swift的類型推斷機制,還可以這樣寫:var shoppingList = ["Eggs","Milk"]訪問和修改數組
可以使用數組的只讀屬性count來獲取數組中的數據項的數量。使用布爾屬性isEmpty作為一個縮寫形式去檢查count屬性是否為0.也可以使用append(_:)方法在數組后面添加新的數據項:shoppingList.append("flour")除此之外,使用加法賦值運算符也可以直接在數組后面添加一個或者多個擁有相同類型的數據項:shoppingList += ["baking powder"]可以用下標來改變某個已有索引值對應的數據值:shoppingList[0] = "six eggs"還可以利用下標一次改變一系列數據值,即使新數據和原有數據的數量不一樣。shoppingList[1...3] = ["bananas","apples"]調用數組的insert(_:at:)方法來在某個具體的索引值之前添加數據項:shoppingList.insert("maple", at: 0)可以用remove(at:)方法來移除數組中的某一項。這個方法吧數組在特定索引值中存儲的數據項移除并且返回這個被移除的數據項:let maple = shoppingList.remove(at: 0)數組的遍歷
可以用for-in循環來遍歷所有數組中的數據項:for item in shoppingList { PRint(item) }如果同時需要每個數據項的值和索引值,可以使用enumerated()方法來進行數組遍歷。enumerated()返回一個由每一個數據項索引值和數據值組成的元組。可以把這個元組分解成臨時常量或者變量來進行遍歷:for (index,value) in shoppingList.enumerated() { print("Item /(String(index + 1)):/(value)") }集合
集合類型語法
swift中的set類型被寫為Set<Element>,這里的Element表示Set中允許存儲的類型,和數組不同的是,集合沒有等價的化簡形式。創建和構造一個空的集合
可以通過構造器語法創建一個特定類型的空集合:var letters = Set<Character>()用數組字面量創建集合
可以使用數組字面量來構造集合,并且可以使用簡化形式寫一個或者多個值作為集合元素。var favoriteGenres:Set<String> = ["Rock","Classical","Hip hop"]一個Set類型不能從數組字面量中被單獨推斷出來,因此Set類型必須顯示聲明。然而,由于swift的類型推斷功能,如果你想使用一個數組字面量構造一個Set并且該數組字面量中的所有元素類型相同那么你無需寫出Set的具體類型。var favoriteGenres:Set = ["Rock","Classical","Hip hop"]訪問和修改一個集合
可以使用只讀屬性count。使用布爾屬性作為一個縮寫形式去檢查count屬性是否為0.可以通過調用Set的insert(_:)方法來添加一個新元素:favoriteGenres.insert("Jazz")可以通過調用Set的remove(_:)方法去刪除一個元素,如果該值是該Set的一個元素則刪除該元素并且返回被刪除的元素值,否則如果該Set不包含該值,則返回nil。let removedGenre = favoriteGenres.remove("Rock")使用contains(_:)方法去檢查Set中是否包含一個特定的值:if favoriteGenres.contains("Funk") { }遍歷一個集合
可以在一個for-in循環中遍歷一個Set中的所有值。for genre in favoriteGenres { }swift的Set類型沒有確定的順序,為了按照特定順序來遍歷一個Set中的值可以使用sorted()方法,他將返回一個有序數組,這個數組的元素排列順序由操作符<對元素進行比較的結果來確定。for genre in favoriteGenres.sorted() { }集合操作
集合基本操作使用intersection(_:)方法根據兩個集合中都包含的值創建的一個新的集合。使用symmetricDifference(_:)方法根據在一個集合中但不在兩個集合中的值創建一個新的集合。使用union(_:)方法根據兩個集合的值創建一個新的集合。使用subtracting(_:)方法根據不在該集合中的值創建一個新的集合。let oddDigits:Set = [1,3,5,7,9] let evenDigits:Set = [0,2,4,6,8] let singleDigitPrimeNumers:Set = [2,3,5,7] oddDigits.union(evenDigits).sorted() oddDigits.intersection(evenDigits).sorted() oddDigits.subtracting(singleDigitPrimeNumers).sorted() oddDigits.symmetricDifference(singleDigitPrimeNumers).sorted()集合成員關系和相等
使用“是否相等”運算符來判斷兩個集合是否包含全部相同的值。使用isSubset(of:)方法來判斷一個集合中的值是否也被包含另一個集合中。使用isSuperset(of:)方法來判斷一個集合中包含另一個集合中所有的值。使用isStrictSubset(of:)或者isStrictSuperset(of:)方法來判斷一個集合是否是另外一個集合的子集合或者父集合并且兩個集合并不相等。使用isDisjint(with:)方法來判斷兩個集合是否不含有相同的值。let houseAnimals:Set = ["?","?"] let farmAnimals:Set = ["?","?","?","?","?"] let cityAnimals:Set = ["?","?"] houseAnimals.isSubset(of: farmAnimals) farmAnimals.isSuperset(of: houseAnimals) farmAnimals.isDisjoint(with: cityAnimals字典
字典類型簡化語法
swift的字典使用Dictionary<Key,Value>定義,其中Key是字典中鍵的數據類型,Value是字典中對應于這些鍵所存儲值的數據類型。我們也可以用[Key:Value]這樣簡化的形式去創建一個字典類型。雖然這兩種形式功能上相同,但是后者是首選。創建一個空字典
可以像數組一樣使用結構語法創建一個擁有確定類型的空字典:var namesOfIntegers = [Int: String]()用字典字面量創建字典
var airports:[String:String] = ["YYZ":"Toronto","DUB":"Dublin"]也可以這樣:var airports: = ["YYZ":"Toronto","DUB":"Dublin"]因為這個語句中所有的鍵和值都各自擁有相同的數據類型,swift可以推斷出Dictionary<String,String>是airports字典的正確類型。訪問和修改字典
可以通過字典的方法和屬性來訪問和修改字典,或者通過使用下標語法。可以通過字典的只讀屬性count來獲取某個字典的數據項數量。使用布爾屬性isEmpty作為一個縮寫形式去檢查count屬性是否為0.如果有值存在于更新前,則這個可選值包含了舊值,否則他將會是nil。if let oldValue = airports.updateValue("Dublin Airport", forKey: "BUB") { }也可以使用下標語法來在字典中檢索特定鍵對應的值。因為有可能請求的鍵沒有對應的值存在,字典的下標訪問會返回對應值的類型的可選值。如果這個字典包含請求鍵所對應的值,下標會返回一個包含這個存在值的可選值,否則將返回nil。if let airportName = airports["DUB"]{ }此外,也可以用來在字典中移除鍵值對。if let removedValue = airports.removeValue(forKey: "DUB"){ }字典遍歷
可以使用for-in循環來遍歷某個字典中的鍵值對。每一個字典中的數據項都以(key,value)元組形式返回,并且我們可以使用臨時常量或者變量來分解這些元組:for (airportCode,airportName) in airports { }通過訪問keys或者values屬性,也可以變量字典的鍵或者值:for airportCode in airports.keys { } for airportName in airports.values { }取自《the swift programming language》中文版
新聞熱點
疑難解答