第一章 Swift介紹

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相近囱桨,不過也有不同之處:

  1. if語句并非必須將檢測表達(dá)式放入括號中。
  2. 條件語句的代碼塊必須在大括號中嗅绰。
  3. 檢測表達(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的入口霎奢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饼灿,隨后出現(xiàn)的幾起案子幕侠,更是在濱河造成了極大的恐慌,老刑警劉巖碍彭,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晤硕,死亡現(xiàn)場離奇詭異,居然都是意外死亡庇忌,警方通過查閱死者的電腦和手機(jī)舞箍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皆疹,“玉大人疏橄,你說我怎么就攤上這事÷跃停” “怎么了捎迫?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長表牢。 經(jīng)常有香客問我窄绒,道長,這世上最難降的妖魔是什么崔兴? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任彰导,我火速辦了婚禮,結(jié)果婚禮上敲茄,老公的妹妹穿的比我還像新娘螺戳。我一直安慰自己,他們只是感情好折汞,可當(dāng)我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盖腿,像睡著了一般爽待。 火紅的嫁衣襯著肌膚如雪损同。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天鸟款,我揣著相機(jī)與錄音膏燃,去河邊找鬼。 笑死何什,一個胖子當(dāng)著我的面吹牛组哩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播处渣,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼伶贰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罐栈?” 一聲冷哼從身側(cè)響起黍衙,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荠诬,沒想到半個月后琅翻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡柑贞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年方椎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧嘶。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡棠众,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出康辑,到底是詐尸還是另有隱情摄欲,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布疮薇,位于F島的核電站胸墙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏按咒。R本人自食惡果不足惜迟隅,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望励七。 院中可真熱鬧智袭,春花似錦、人聲如沸掠抬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膨报。三九已至巴比,卻和暖如春塔沃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背单起。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工抱怔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘀倒。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓屈留,卻偏偏與公主長得像,于是被迫代替她去往敵國和親测蘑。 傳聞我的和親對象是個殘疾皇子灌危,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容