1、使用 let 來聲明常量,使用 var 來聲明變量。
注:你能夠在一行中聲明多個常量或者多個變量。用逗号隔開。
2、類型标注
假設初始值沒有提供足夠的資訊(或者沒有初始值),那你須要在變量後面聲明類型,用冒号切割。
let variable: String
注意:一般來說你非常少須要寫類型标注。
假設你在聲明常量或者變量的時候賦了一個初始值,Swift能夠判斷出這個常量或者變量的類型。
3、輸出函數println 和 print
println:是一個用來輸出的全局函數,輸出的内容會在最後換行。
print:唯一差别是在輸出内容最後不會換行。
4、把值轉換成字元串
有一種更簡單的把值轉換成字元串的方法:把值寫到括号裡,而且在括号之前寫一個反斜杠。
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
5、凝視
單行凝視://
多行凝視:/* */
6、浮點數
Double:表示64位浮點數。
當你須要存儲非常大或者非常高精度的浮點數時請使用此類型。
Float:表示32位浮點數。精度要求不高的話能夠使用此類型。
7、類型别名
類型别名(type aliases)就是給現有類型定義還有一個名字。你能夠使用 typealias keyword來定義類型别名。
比如:當你想要給現有類型起一個更有意義的名字時,類型别名很實用。如果你正在處理特定長度的外部資源的資料:
typealias AudioSample = UInt16
var minFound = AudioSample.min
var maxFound = AudioSample.max
8、建立元組 tuples
元組(tuples)把多個值組合成一個複合值。元組内的值能夠使随意類型,并不要求是同樣類型。
比如:let http404Error = (404, "Not Found")
9、元組内容的分解
能夠将一個元組分解成單獨的常量和變量使用。
let (statusCode, statusStr) = http404Error
假設你僅僅須要一部分元組值,分解的時候能夠把要忽略的部分用下劃線(_)标記。
let (justTheStatusCode, _) = http404Error
你還能夠通過下标來訪問元組中的單個元素,下标從零開始。
var code = http404Error.0
var msg = http404Error.1
10、可選值 optionals 的強制解析
一個可選的 Int 被寫作 Int?而不是 Int,它表示這個整形變量可能有值,或者可能為nil(沒值)。
你能夠使用 if 語句來推斷一個可選是否包括值。假設可選有值,結果是 true;假設沒有值,結果是 false。
可選值的強制解析:當你知道可選确實包括值後,則能夠在可選的名字後面加上一個感歎号(!)來擷取值。
11、nil
這個表示沒有值的意思。
假設你聲明一個可選常量或者變量可是沒有指派,它們會自己主動被設定為 nil:
var surveyAnswer: String?
注意:nil 不能用于非可選的常量和變量。假設你的代碼中有常量或者變量須要處理值缺失的情況,請把它們聲明成相應的可選類型。
12、 隐式解析可選
有時候在程式架構中,第一次被指派之後,能夠确定一個可選總會有值。在這樣的情況下,每次都要推斷和解析可選值是很低效的,由于能夠确定它總會有值。
這時我們就能夠使用隐式解析可選。僅僅須要把後面的 ? 改成 ! 就可以。
13、隐式可選和可選的取值差别
let possibleString: String?
= "An optional string."
println(possibleString!) // 須要驚歎号來擷取值
let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString) // 不須要感歎号
注意:假設一個變量之後可能變成 nil 的話請不要使用隐式解析可選。假設你須要在變量的 生命周期中推斷是否是 nil 的話,請使用普通可選類型。
14、斷言
有時候假設缺少某些條件。我們不想讓代碼繼續運作下去,就能夠使用斷言(assertion)。
斷言會推斷一個邏輯條件是否為true,假設是true則執行下去。否則就中止執行。
使用assert函數來寫斷言。比如:
let age = -3
assert(age >= 0, "a person's age can not less than 0”)
由于age >= 0 為false, 則斷言觸發,中止執行。
15、何時使用斷言
- 整數的附屬腳本索引被傳入一個自己定義附屬腳本實作,可是下标索引值可能太小或者太大。
- 須要給函數傳入一個值,可是非法的值可能導緻函數不能正常運作。
- 一個可選值如今是nil,可是後面的代碼執行須要一個非 nil 值。
注意:斷言可能導緻你的應用終止執行,是以你應當細緻設計你的代碼來讓非法條件不會出現。然而,在你的應用公布之前,有時候非法條件可能出現,這時使用斷言能夠高速發現問題。
16、建立數組和字典
使用方括号[ ]來建立數組和字典,并使用下标或者鍵(key)來訪問元素。
var shoppingList = [" catfish", "water", " tulips", "blue paint"]
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
17、建立空數組和字典
假設類型資訊能夠被判斷出來,你能夠用[]和[:]來建立空數組和空字典——就像你聲明變量或者給函數傳參數的時候一樣。
18、負數求餘
在對負數 -b 求餘時, -b的符号會被忽略. 這意味着 a % b 和 a % -b的結果是同樣的.
19、閉區間運算符
閉區間運算符 a...b 定義一個包括從 a 到 b (包括 a 和 b)的全部值的區間。
20、半閉區間運算符
半閉區間 a..<b 定義一個從 a 到 b 但不包含 b 的區間. 之是以稱為半閉區間, 是由于該區間包含第一個值而不包含最後的值。
友善的使用于數組,比如:
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
println("第 \(i + 1) 個人叫 \(names[i])")
}
21、字元串字面量
代碼中包括一段提前定義的字元串值作為字元串字面量,它能夠包括以下的特殊字元:
1.轉義特殊字元 \0 (空字元)、\\(反斜線)、\t (水準制表符)、\n (換行符)、\r (回車符)、\" (雙引號)、\' (單引號)。
2.單位元組 Unicode 标量。寫成 \xnn,當中 nn 為兩位十六進制數。
3.雙位元組 Unicode 标量,寫成 \unnnn,當中 nnnn 為四位十六進制數。
4.四位元組 Unicode 标量,寫成 \Unnnnnnnn,當中 nnnnnnnn 為八位十六進制數。
22、字元串空屬性推斷
var str = ""
str.isEmpty //true
23、 countElements 函數
通過調用全局 countElements 函數。并将字元串作為參數進行傳遞能夠擷取該字元串的字元數量。
var str = "andy is a good guy"
countElements (str)
24、字元串插值
插入的字元串字面量的每一項都被包裹在以反斜線為字首的圓括号裡。
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
25、字元串比較
Swift 提供了三種方式來比較字元串的值:字元串相等,字首相等和字尾相等。
(1)字元串相等:即使用 == 來比較字元串
(2)字首/字尾相等:通過調用字元串的 hasPrefix/hasSuffix 方法來檢查字元串是否擁有特定字首/字尾。它會傳回一個Boolean值。
26、字元串大寫和小寫
您能夠通過字元串的 uppercaseString 和 lowercaseString 屬性來訪問一個字元串的大寫/小寫版本号。
27、數組的類型标注
Swift 數組應該遵循像Array<SomeType>這種形式。當中sometype是這個數組中唯一同意存在的資料類型。 我們也能夠使用像SomeType[]這種簡單文法(推薦)。
假設我們建立了一個String 值類型的數組,我們不能往當中插入不論什麼不是String 類型的資料。 Swift 中的數組是類型安全的。而且它們中包括的類型必須明白。
var shoppingList: String[] = ["Eggs", "Milk"]
由于Swift有類型判斷。 是以當我們擁有同樣類型的數組值時,我們能夠寫成:var shoppingList = ["Eggs", "Milk"]
28、建立空數組
建立特定資料類型的空數組,比如建立Int類型的空數組。
var someInts = Int[]()
29、數組的屬性和方法
(1)count屬性:獲得數組中資料的數量。
(2)isEmpty屬性:檢查數組是否存在值。
(3)append / += 方法:我們能夠使用append方法或者 += 運算符在數組後面加入資料項。
比如:shoppingList.append("Flour") 或者 shoppingList += "Baking Powder" 或者 shoppingList += [ "Cheese", "Butter"]
(4)insert(atIndex:)方法:在某個詳細索引值之前加入資料項。
比如:shoppingList.insert("Maple Syrup", atIndex: 0)
(5)removeAtIndex()方法:移除數組中的某一項。這種方法把數組在特定索引值中存儲的資料項移除而且傳回這個被移除的資料項。
比如:let mapleSyrup = shoppingList.removeAtIndex(0)
(6)removeLast()方法:移除數組中最後一項并傳回其值。
30、利用下标改變一系列資料值
即使新資料和原有資料的數量是不一樣的。
以下的樣例把"Chocolate Spread"。"Cheese",和"Butter" 替換為"Bananas"和 "Apples":
shoppingList[4...6] = ["Bananas", "Apples"]
31、數組周遊
一般來說,for-in循環就可以,可是假設我們須要每一個資料項的值和索引,則須要使用全局 enumerate 函數來進行數組周遊,比如:
for (index, value) in enumerate(shoppingList) {
...
}
32、建立特定大小,資料預設的Array
// threeDoubles 是一種 Double[]數組, 等于 [0.0, 0.0, 0.0]
var threeDoubles = Double[](count: 3, repeatedValue:0.0)
由于我們Swift有類型判斷的存在,是以在使用這樣的構造方法的時候不須要指明資料類型,由于從value中我們就知道了資料的類型:
var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5)
33、字典
字典是一種存儲同樣類型多重資料的存儲器。每一個值(value)都關聯獨特的鍵(key)。鍵作為字典中的這個值資料的辨別符。
注:在某個特定字典中能夠存儲的鍵和值必須預定義清楚。方法是通過顯性類型标注或者類型判斷。
Swift 的字典使用Dictionary<KeyType, ValueType>定義,當中KeyType是字典中鍵的資料類型。ValueType是字典中相應于這些鍵所存儲值的資料類型。
比如:var airports: Dictionary<String, String> = ["TYO": "Tokyo", "DUB": "Dublin"]
和數組一樣,假設我們使用字面語句構造字典就不用把類型定義清楚。
airports的也能夠用這樣的方法簡短定義:
var airports = ["TYO": "Tokyo", "DUB": "Dublin"]
34、字典的方法和屬性
基本和數組一樣,都有類似的方法和屬性,而且特别存在例如以下:
(1)updateValue(forKey:)方法:在這個鍵不存在相應值的時候設定值或者在存在時更新已存在的值,這種方法傳回更新值之前的原值。這樣友善我們檢查更新是否成功。
(2)removeValueForKey(KeyName)方法:在鍵值對存在的情況下會移除該鍵值對而且傳回被移除的value或者在沒有值的情況下傳回nil。
35、移除鍵值對
我們能夠對某個鍵相應值賦予nil來移除這個鍵值對。
airports["APL"] = nil
36、字典周遊
使用for-in就可以:
for (airportCode, airportName) in airports {
...
37、字典的keys 或 values 屬性
這些屬性代表一個字典的全部key 或 value 的集合。
for airportCode in airports.keys {
...
for airportName in airports.values {
....
}
38、将鍵 或 值構造成一個新數組
let airportCodes = Array(airports.keys)
// airportCodes is ["TYO", "LHR"]
let airportNames = Array(airports.values)
// airportNames is ["Tokyo", "London Heathrow"]
39、建立一個空字典
var namesOfIntegers = Dictionary<Int, String>()
注:假設上下文中存在了空字典的字面語句,比如:namesOfIntegers[16] = "sixteen" ,則我們能夠使用 namesOfIntegers = [:] 來定義一個Int, String類型的空字典。