1.1 Swift基本語法
接觸 一個新語言就先從
println("Hello World")
開始
1.1.1 常量和變量
在Swift中用var
關(guān)鍵字聲明一個變量,而聲明常量則用let
關(guān)鍵字驴剔。這樣的聲明規(guī)則適用于Swift中所有的數(shù)據(jù)類型佑附,這點與Objective-C有差別苏携。在Swift中,一個對象的可變版本與b不可變版本具有相同的類型——并不是子類(subclass)的關(guān)系。
注意:Swift中的所有的數(shù)據(jù)類型是有三種不同的數(shù)據(jù)結(jié)構(gòu)中某一種實現(xiàn)的。1. 枚舉(enum) 2.結(jié)構(gòu)體(struct) 3. 類(class)舀射。在代碼中這些數(shù)據(jù)類型的傳遞方式也不同。
** 枚舉和 結(jié)構(gòu)體在代碼中以值的方式進(jìn)行傳遞**怀伦。即創(chuàng)建原始對象的副本并對其賦值脆烟,對原始或者副本對象的修改、刪除操作不會影響到另外一個房待。
類是通過引用的方式進(jìn)行傳遞的邢羔。即將指向原始變量的指針賦值給新的變量,無論修改哪個變量桑孩,另一個變量也會受到影響拜鹤。
Swift一門強(qiáng)類型語言,每一個變量的類型在編譯時期就已經(jīng)確定了流椒,并且在其整個生命周期里只能存儲固定類型的值
聲明變量var itemCount: int
敏簿,即是聲明了一個名為itemCount的Int類型變量。使用變量前,必須給變量設(shè)置一個初始值惯裕。其實在聲明時温数,就可以設(shè)置初始值,如var itemCount: int = 2
蜻势。
Swift還有個功能為類型推斷撑刺。如果編譯器能夠從初始值中獲取得足夠多的信息,進(jìn)而推斷出初始值的類型握玛。例如我們可以這樣聲明一個Int類型變量var itemCount = 2
够傍。同理如果初始值設(shè)置為函數(shù)的返回值,編譯器會把變量的類型推斷為與函數(shù)返回值一直的類型败许。
1.1.2 字符串插值
利用字符串的插值操作王带,將變量、常量和其他表達(dá)式的值添加到輸出中市殷。字符串插值為:在括號中包含一個變量或表達(dá)式愕撰,再用一個反斜杠進(jìn)行轉(zhuǎn)義,最后將其直接添加到字符串中醋寝。例如:
var count = 99
println("there are \ (count) apples in your box")
//輸出:there are 99 apples in your box
字符串插值操作不僅僅適用于打印輸出搞挣,在使用字符串的任何地方都可以使用。
例如:
var firstName = "peng"
var lastName = "xiaoZhi"
var userName = " \ (firstName ) \ (lastName) \ (arc4random()%500)"
//userName: pengxiaoZhi255
1.1.3 流程控制
條件語句
Swift提供了if和switch兩種語法結(jié)構(gòu)來有條件地執(zhí)行代碼塊音羞。
if語句與Objective-C相近囱桨,不過也有不同之處:
- if語句并非必須將檢測表達(dá)式放入括號中。
- 條件語句的代碼塊必須在大括號中嗅绰。
- 檢測表達(dá)式的結(jié)果必須明確地為true或者flase舍肠,一個值為0的int變量并不會隱式的等價于false,其他的值也不會窘面。
switch語句基于Objective-C翠语,在Swift中它更加強(qiáng)大。不過我們也需要考慮兩個重要的區(qū)別财边。
第一:在Swift中必須覆蓋每一種可能出現(xiàn)的情況肌括。default分支可以滿足這一要求。
第二:在Swift中當(dāng)遇到下一個case分支開始時酣难,switch語句會自動結(jié)束谍夭。
循環(huán)語句
與Objective-C類似,唯一不同的就是在語法表達(dá)上憨募。
例:
//for循環(huán)
for var i = 0; i < 10; ++i{
println("i = \ (i)")
}
//for in
for i in 0 ..< 10{
println("i = \ (i)")
}//"..<"是半開區(qū)間運算符紧索,它包含區(qū)間最左邊的值,但是不包含最右邊的值馋嗜∑氚澹“...”是閉區(qū)間運算符,它包括區(qū)間兩端的值。
迭代集合(例如數(shù)組)
var itemIds: [int] = generateItemIds()
for itenId in itemIds{
println("itemId :\ (itemId)")
}
while和do-while和Objective-C一樣甘磨,只是去掉了檢測表達(dá)式的括號橡羞。break和continue的效果完全一樣,break跳出當(dāng)前循環(huán)济舆,取消之后迭代卿泽。continue終止當(dāng)前迭代,立即開始下一次迭代滋觉。
swift有一個Objective-C沒有的強(qiáng)大功能:給循環(huán)語句增加一個標(biāo)簽(label),然后在內(nèi)部循環(huán)中指定希望break或continue到哪個循環(huán)中签夭。一個標(biāo)簽由名稱之后跟著一個冒號構(gòu)成,并且標(biāo)簽位于循環(huán)語句關(guān)鍵字之前:
var folders: [SomeFolderClass] = foldersToProcess()
outer: for folder in folders{
inner: for file in folder{
if shouldCancle (){
break outer
}
file.process()
}
}
1.2 基本數(shù)據(jù)類型
1.2.1 整型
整型為Int椎侠。Int在32位設(shè)備中為32位整型第租,在64位設(shè)備中為64位整型。當(dāng)需要特定長度時我纪,可使用Int8慎宾、Int16、Int32或Int64浅悉。前面加一個U就是對應(yīng)的無符號版本趟据。
注:swift為強(qiáng)類型語言,代碼中不能隨意混合搭配使用Int的各種類型术健,并且不能在混合類型之間做數(shù)學(xué)運算和比較操作汹碱。
警告:當(dāng)在設(shè)備間傳輸文件時,為了確保兼容性荞估,寫入到文件中所有的整型變量都應(yīng)該明確指定長度
1.2.2 Double和Float
swift代碼中咳促,當(dāng)需要使用小數(shù)時,可以使用Float和Double類型勘伺。Float是32位值等缀,Double是64位值,這與設(shè)備的架構(gòu)無關(guān)娇昙。當(dāng)使用小數(shù)時,編譯器總是將其推斷為Double類型笤妙,而不是Float冒掌。因此,如果不需要64位的高精度蹲盘,需要顯示地將變量聲明為Float股毫。
1.2.3 布爾型
布爾型用于存儲布爾值,這與Objective-C非常相似召衔,只不過swift使用的是true和false铃诬,而Object-C使用YES和NO。
注:在Objective-C中,許多類型都可以轉(zhuǎn)換為布爾類型趣席。如果某種類型值存在內(nèi)容兵志,會轉(zhuǎn)換為YES,如果是空的宣肚,則轉(zhuǎn)換為NO想罕。Swift則不同。在Swift中只有顯示地返回一個布爾類型才能被用于布爾值的聲明霉涨。在代碼中不能將布爾值與0或nil隱式地進(jìn)行比較按价。
1.2.4 字符串
Swift中的字符串跟Objective-C中的有很大差別。
var str = "Hello World"
只需簡單的置于雙引號內(nèi)即可笙瑟。
String是Character類型值的集合楼镐。通過計算字符在內(nèi)存中所占字節(jié)數(shù)判斷一個字符串的長度,在OC中是可以的往枷。Swift中必須通過count()函數(shù)來判斷一個字符串中有多少個字符框产。Swift中的String也兼容OC中的NSString,由于兩者的實現(xiàn)方式有所不同师溅,因此從NSString的length屬性得到的元素總數(shù)可能跟Swift中不盡相同茅信。通過String的屬性utf16Count
獲得的值與NSString的length屬性才會相同。
Swift中兩個字符串拼接直接用+號墓臭。
注:不能直接將Character與String進(jìn)行拼接蘸鲸。必須創(chuàng)建一個新的包含Character值的String在于其他String拼接。String(character) + str1
兩個字符串比較直接用==號返回true或false窿锉。
1.2.5 數(shù)組
在Swift中酌摇,聲明數(shù)組時必須指定數(shù)組包含的類型。一旦確定類型嗡载,數(shù)組中就只能包含確定的這一類型窑多。
var dogs = ["ahuang","piqiu","heizi","wangcai","alv"]//每項的類型必須是相同的類型,否則會出現(xiàn)編譯錯誤
聲明時有兩種方法可以表示聲明的類型是一個數(shù)組:長形式和短形式洼滚。效果是一樣的埂息,可以互換使用:
- 長形式:Array<ValueType>
- 短形式:[ValueType]
注:在Swift中創(chuàng)建一個不可變的數(shù)組時,無法對數(shù)組做添加遥巴、修改和刪除操作千康。不過可以修改數(shù)組中元素的屬性。
對數(shù)組進(jìn)行訪問和修改的放法:
var array :[Int] = [1,2,3]
println(arrar.count) //輸出3铲掐,數(shù)組的個數(shù)
array.append(4) //[1,2,3,4] 末尾增加元素
arrar.insert(5,atIndex:0) //[5,1,2,3,4] 指定的位置增加元素
array.removeAtIndex(1) //[5,2,3,4] 刪除指定的元素
array.removeLast() //[5,2,3]刪除最后一個元素
array.removeAll() //[] 刪除所有元素
println(arrar.isEmpty) //ture 判斷數(shù)組是否為空
1.2.6 字典
字典的聲明方式跟數(shù)組一樣拾弃,也分為長形式和短形式,可以互換使用:
- 長形式:Dictionary<KeyType: ValueType>
- 短形式:[KeyType: ValueType]
聲明字典是摆霉,只要提供足夠多的信息豪椿,就可以使用類型推斷:var Dic = ["Jack":32, "Rose":28]
推斷這是一個[String:Int]類型奔坟。
使用count屬性可以判斷出字典的元素總個數(shù)。利用字典中的兩個數(shù)組屬性keys和values可以單獨對字典進(jìn)行迭代搭盾。
數(shù)組跟字典都是集合的一種咳秉,可以使用for-in對兩個進(jìn)行迭代。
以上就是第一章的內(nèi)容增蹭,可能會有些繁瑣滴某,主要是區(qū)別OC來講的。有些基本知識還是需要知道的滋迈,希望能成為學(xué)習(xí)Swift的入口霎奢。