1.常量與變量
常量用 "let"修飾,?例如 let a:Int = 12,?其中冒號(hào)后邊加的是參數(shù)類(lèi)型, 如果在賦值時(shí)給定了確定的值, 則參數(shù)類(lèi)型可以省略, 因?yàn)镾wift中編譯器可以根據(jù)后邊的賦值自動(dòng)判斷參數(shù)的類(lèi)型,這也是區(qū)別OC的地方妓盲。
變量用"var"修飾, 如var b:Int = 2
2.字符串
let str = "hello"
獲取字符串長(zhǎng)度: str.characters.count ?/ ? str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
大寫(xiě)轉(zhuǎn)換: str.uppercaseString ?/ 小寫(xiě)轉(zhuǎn)換: str.lowercaseString
字符串拼接: str1 + str2
格式化創(chuàng)建字符串: let str3 = String(format: "%02d:%02d", 1,2)? / ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?let str3 = String(format: "%02d-%02d", arguments: [1,2])
剪切:str.substringToIndex(str2.substringToIndex(str2.startIndex.advancedBy(1)))? //Swift中的字符串剪切要先把指定位置轉(zhuǎn)化為index類(lèi)型, 這個(gè)相對(duì)麻煩一點(diǎn)
注: 字符串的其他操作全部轉(zhuǎn)化為NSString再去操作 let tempStr:NSString = str2 as NSString
3.數(shù)組凤藏、字典、元祖
Swift中的初始化全部轉(zhuǎn)化為了"()", 例如let array = [String]()
let array = ["a", "b", "c", "d"]
數(shù)組遍歷for-in (明確指出數(shù)組的類(lèi)型)
for temp in array as [String] {
}
元祖遍歷
for (index, value) in array.enumerate() { ? //enumerate為快速枚舉
? ? ?print("index = \(index), value = \(value)")
}
可變數(shù)組
var mutableArray = [String]()
mutableArray.append("hello") ? ?//添加元素到數(shù)組
mutableArray.removeAll(keepCapacity: true) ?//該方法在刪除元素后保留數(shù)組空間
mutableArray.removeFirst(1) ? ?//從第一個(gè)元素開(kāi)始刪除指定個(gè)數(shù)元素
字典
let dict = ["key1":"value1", "key2", :"value2"] ?//創(chuàng)建字典
dict["key1"] ? //通過(guò)key訪問(wèn)value
for (key, value) in dict {
} ? ? ? //遍歷
可變字典
var dict = ["key":"value"]
for (key, value) in dict {
dict[key] = value ? ? //如果key存在則是一個(gè)更新鍵值對(duì)操作, 否則是一個(gè)增加鍵值對(duì)操作
} ? ?
可選類(lèi)型
可選類(lèi)型(Optional)--如果一個(gè)值可能為nil, 那么這個(gè)值就是可選類(lèi)型, 用"?"標(biāo)識(shí), Optional包圍的就是一個(gè)可選類(lèi)型
可選類(lèi)型不能直接使用, 需要進(jìn)行強(qiáng)制解包(!), 對(duì)nil強(qiáng)制解包會(huì)造成崩潰,系統(tǒng)會(huì)提示:unexpectedly found nil while unwrapping an Optional value 錯(cuò)誤
(a ?? "234")對(duì)可選類(lèi)型進(jìn)行判斷, 如果可選類(lèi)型為nil, 則給它一個(gè)默認(rèn)值
if條件語(yǔ)句
if條件語(yǔ)句:"()"可以省略, "{}"不能省略, if中沒(méi)有非0即真的概念, 只有true或者false兩種情況.
在if語(yǔ)句中, 條件必須是一個(gè)布爾表達(dá)式---這就意味著像 if score{...}這樣的代碼將報(bào)錯(cuò),而不是隱式的與0做對(duì)比
可選的條件分支
(1)if-let 是對(duì)可選類(lèi)型的判斷, 如果可選類(lèi)型為nil, 則不執(zhí)行代碼塊, 如果不為空則用一個(gè)變量/常量來(lái)接收這個(gè)可選類(lèi)型解包后的值
(2)if-let-where和if-let相似, where是對(duì)前面定義的局部變量再做一層判斷
(3)guard-let-else(守護(hù)),如果可選類(lèi)型為nil,則執(zhí)行代碼塊,最后一定要return,如果不為nil則將強(qiáng)制解包后的值賦給一個(gè)變量,這樣在{}外面就可以使用該變量
switch
Swift中的switch不局限判斷整型, 可以是浮點(diǎn)型, 也可以是字符串等等, switch后面的小括號(hào)可以省略, 大括號(hào)不能省略
case后面至少要有一條執(zhí)行語(yǔ)句, 并且case后面的大括號(hào)可以省略, break可以不寫(xiě), 不會(huì)造成貫穿
default一定要寫(xiě), 并且只能寫(xiě)在最后
for循環(huán)
Swift中的for循環(huán)在3.0之后被廢棄掉了
for var i = 0;i < 5; i++ {
print(i)
} ? ?//被廢棄
for i in 0..<5{ ? ?//0..<5----[0,5) ? ? 0...5----[0,5]
print("i =\(i)")
} ? //for循環(huán)的新寫(xiě)法
枚舉
枚舉可以關(guān)聯(lián)浮點(diǎn), 字符串, 沒(méi)有默認(rèn)的關(guān)聯(lián)值
關(guān)聯(lián)的值如果是Int, 會(huì)默認(rèn)遞增, 如果不是Int, 必須每個(gè)枚舉值都關(guān)聯(lián)對(duì)應(yīng)的值
如果明確指出一個(gè)變量/常量是屬于哪種枚舉類(lèi)型的話(huà), 可以直接".枚舉"賦值, 否則就"枚舉類(lèi)型.枚舉值"
枚舉類(lèi)型中有rawValue和hashValue
rawValue代表該變量在枚舉類(lèi)型中的值
hashValue代表該變量是枚舉類(lèi)型中的第幾個(gè)(即下標(biāo))