Swift開發(fā)指南(基于ios8正式版修訂)_第1頁
Swift開發(fā)指南(基于ios8正式版修訂)_第2頁
Swift開發(fā)指南(基于ios8正式版修訂)_第3頁
Swift開發(fā)指南(基于ios8正式版修訂)_第4頁
Swift開發(fā)指南(基于ios8正式版修訂)_第5頁
已閱讀5頁,還剩366頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Swift開發(fā)指南基于ios8正式版修訂目錄\h第一部分基礎(chǔ)篇\h第1章準備開始\h1.1本書學(xué)習(xí)路線圖\h1.2本書中的約定\h1.2.1示例代碼約定\h1.2.2圖示的約定\h1.3Xcode開發(fā)工具\h1.3.1Xcode安裝和卸載\h1.3.2Xcode界面\h1.4如何使用API幫助\h1.5本章小結(jié)\h1.6同步練習(xí)\h第2章第一個Swift程序\h2.1使用Playground編寫\h2.1.1編程利器Playground\h2.1.2編寫HelloWorld程序\h2.2代碼解釋\h2.3本章小結(jié)\h2.4同步練習(xí)\h第3章Swift基本語法\h3.1標識符和關(guān)鍵字\h3.1.1標識符\h3.1.2關(guān)鍵字\h3.2常量和變量\h3.2.1常量\h3.2.2變量\h3.2.3命名規(guī)范\h3.3注釋\h3.4表達式\h3.5本章小結(jié)\h3.6同步練習(xí)\h第4章基本運算符\h4.1算術(shù)運算符\h4.1.1一元運算符\h4.1.2二元運算符\h4.1.3算術(shù)賦值運算符\h4.2關(guān)系運算符\h4.3邏輯運算符\h4.4位運算符\h4.5其他運算符\h4.6本章小結(jié)\h4.7同步練習(xí)\h第5章基本數(shù)據(jù)類型\h5.1Swift數(shù)據(jù)類型\h5.2整型\h5.3浮點型\h5.4數(shù)字表示方式\h5.4.1進制數(shù)字表示\h5.4.2指數(shù)表示\h5.4.3其他表示\h5.5數(shù)字類型之間的轉(zhuǎn)換\h5.5.1整型之間的轉(zhuǎn)換\h5.5.2整型與浮點型之間的轉(zhuǎn)換\h5.6布爾型\h5.7元組類型\h5.8本章小結(jié)\h5.9同步練習(xí)\h第6章字符和字符串\h6.1字符\h6.1.1Unicode編碼\h6.1.2轉(zhuǎn)義符\h6.2創(chuàng)建字符串\h6.3字符串可變性\h6.4字符串比較\h6.4.1大小和相等比較\h6.4.2前綴和后綴比較\h6.5本章小結(jié)\h6.6同步練習(xí)\h第7章控制語句\h7.1分支語句\h7.1.1條件語句if\h7.1.2多分支語句switch\h7.1.3在switch中使用范圍匹配\h7.1.4在switch中比較元組類型\h7.2循環(huán)語句\h7.2.1while語句\h7.2.2dowhile語句\h7.2.3for語句\h7.2.4forin語句\h7.3跳轉(zhuǎn)語句\h7.3.1break語句\h7.3.2continue語句\h7.3.3fallthrough語句\h7.4本章小結(jié)\h7.5同步練習(xí)\h第8章集合\h8.1數(shù)組集合\h8.1.1數(shù)組聲明與初始化\h8.1.2數(shù)組的修改\h8.1.3數(shù)組遍歷\h8.2字典集合\h8.2.1字典聲明與初始化\h8.2.2字典的修改\h8.2.3字典遍歷\h8.3集合的復(fù)制\h8.3.1字典復(fù)制\h8.3.2數(shù)組復(fù)制\h8.4本章小結(jié)\h8.5同步練習(xí)\h第9章函數(shù)\h9.1使用函數(shù)\h9.2傳遞參數(shù)\h9.2.1使用外部參數(shù)名\h9.2.2參數(shù)默認值\h9.2.3可變參數(shù)\h9.2.4參數(shù)的傳遞引用\h9.3函數(shù)返回值\h9.3.1無返回值函數(shù)\h9.3.2多返回值函數(shù)\h9.4函數(shù)類型\h9.4.1作為函數(shù)返回類型使用\h9.4.2作為參數(shù)類型使用\h9.5函數(shù)重載\h9.6嵌套函數(shù)\h9.7泛型和泛型函數(shù)\h9.7.1一個問題的思考\h9.7.2泛型函數(shù)\h9.8本章小結(jié)\h9.9同步練習(xí)\h第10章閉包\h10.1回顧嵌套函數(shù)\h10.2閉包的概念\h10.3使用閉包表達式\h10.3.1類型推斷簡化\h10.3.2隱藏return關(guān)鍵字\h10.3.3縮寫參數(shù)名稱\h10.3.4使用閉包返回值\h10.4使用尾隨閉包\h10.5捕獲上下文中的變量和常量\h10.6本章小結(jié)\h10.7同步練習(xí)\h第二部分面向?qū)ο笃猏h第11章Swift語言中的面向?qū)ο筇匦診h11.1面向?qū)ο蟾拍詈突咎卣鱘h11.2Swift中的面向?qū)ο箢愋蚛h11.3枚舉\h11.3.1成員值\h11.3.2原始值\h11.3.3相關(guān)值\h11.4結(jié)構(gòu)體與類\h11.4.1類和結(jié)構(gòu)體定義\h11.4.2再談值類型和引用類型\h11.4.3引用類型的比較\h11.5類型嵌套\h11.6可選類型與可選鏈\h11.6.1可選類型\h11.6.2可選鏈\h11.7訪問限定\h11.7.1訪問范圍\h11.7.2訪問級別\h11.7.3使用訪問級別最佳實踐\h11.8本章小結(jié)\h11.9同步練習(xí)\h第12章屬性與下標\h12.1存儲屬性\h12.1.1存儲屬性概念\h12.1.2延遲存儲屬性\h12.1.3屬性觀察者\h12.2計算屬性\h12.2.1計算屬性概念\h12.2.2只讀計算屬性\h12.2.3結(jié)構(gòu)體和枚舉中的計算屬性\h12.3屬性觀察者\h12.4靜態(tài)屬性\h12.4.1結(jié)構(gòu)體靜態(tài)屬性\h12.4.2枚舉靜態(tài)屬性\h12.4.3類靜態(tài)屬性\h12.5使用下標\h12.5.1下標概念\h12.5.2示例:二維數(shù)組\h12.6本章小結(jié)\h12.7同步練習(xí)\h第13章方法\h13.1實例方法\h13.1.1使用規(guī)范的命名\h13.1.2結(jié)構(gòu)體和枚舉方法變異\h13.2靜態(tài)方法\h13.2.1結(jié)構(gòu)體中靜態(tài)方法\h13.2.2枚舉中靜態(tài)方法\h13.2.3類中靜態(tài)方法\h13.3本章小結(jié)\h13.4同步練習(xí)\h第14章構(gòu)造與析構(gòu)\h14.1構(gòu)造器\h14.1.1默認構(gòu)造器\h14.1.2構(gòu)造器與存儲屬性初始化\h14.1.3使用外部參數(shù)名\h14.2構(gòu)造器重載\h14.2.1構(gòu)造器重載概念\h14.2.2值類型構(gòu)造器代理\h14.2.3引用類型構(gòu)造器橫向代理\h14.3析構(gòu)器\h14.4本章小結(jié)\h14.5同步練習(xí)\h第15章繼承\(zhòng)h15.1從一個示例開始\h15.2構(gòu)造器繼承\(zhòng)h15.2.1構(gòu)造器調(diào)用規(guī)則\h15.2.2構(gòu)造過程安全檢查\h15.2.3構(gòu)造器繼承\(zhòng)h15.3重寫\h15.3.1屬性重寫\h15.3.2方法重寫\h15.3.3下標重寫\h15.3.4使用final關(guān)鍵字\h15.4類型檢查與轉(zhuǎn)換\h15.4.1使用is操作符\h15.4.2使用as操作符\h15.4.3使用Any和AnyObject類型\h15.5本章小結(jié)\h15.6同步練習(xí)\h第16章擴展和協(xié)議\h16.1擴展\h16.1.1聲明擴展\h16.1.2擴展計算屬性\h16.1.3擴展方法\h16.1.4擴展構(gòu)造器\h16.1.5擴展下標\h16.2協(xié)議\h16.2.1聲明和遵守協(xié)議\h16.2.2協(xié)議方法\h16.2.3協(xié)議屬性\h16.2.4把協(xié)議作為類型使用\h16.2.5協(xié)議的繼承\(zhòng)h16.2.6協(xié)議的合成\h16.3擴展中聲明協(xié)議\h16.4本章小結(jié)\h16.5同步練習(xí)\h第17章Swift內(nèi)存管理\h17.1Swift內(nèi)存管理概述\h17.1.1引用計數(shù)\h17.1.2示例:Swift自動引用計數(shù)\h17.2強引用循環(huán)\h17.3打破強引用循環(huán)\h17.3.1弱引用\h17.3.2無主引用\h17.4閉包中的強引用循環(huán)\h17.4.1一個閉包中的強引用循環(huán)示例\h17.4.2解決閉包強引用循環(huán)\h17.5本章小結(jié)\h17.6同步練習(xí)\h第三部分過渡篇\h第18章從Objective-C到Swift\h18.1選擇語言\h18.2Swift調(diào)用Objective-C\h18.2.1創(chuàng)建Swift的iOS工程\h18.2.2在Swift工程中添加Objective-C類\h18.2.3調(diào)用代碼\h18.3Objective-C調(diào)用Swift\h18.3.1創(chuàng)建Objective-C的iOS工程\h18.3.2在Objective-C工程中添加Swift類\h18.3.3調(diào)用代碼\h18.4本章小結(jié)\h18.5同步練習(xí)\h第19章使用Foundation框架\h19.1數(shù)字類NSNumber\h19.1.1獲得NSNumber實例\h19.1.2NSNumber對象的比較\h19.2字符串類\h19.2.1NSString類\h19.2.2NSMutableString類\h19.2.3NSString與String之間的關(guān)系\h19.3數(shù)組類\h19.3.1NSArray類\h19.3.2NSMutableArray類\h19.3.3NSArray與Array之間的關(guān)系\h19.4字典類\h19.4.1NSDictionary類\h19.4.2NSMutableDictionary類\h19.4.3NSDictionary與Dictionary之間的關(guān)系\h19.5本章小結(jié)\h19.6同步練習(xí)\h第四部分實戰(zhàn)篇\h第20章iOS開發(fā)基礎(chǔ)\h20.1iOS介紹\h20.2第一個iOS應(yīng)用HelloWorld\h20.2.1創(chuàng)建工程\h20.2.2Xcode中的iOS工程模板\h20.2.3程序剖析\h20.3iOSAPI簡介\h20.4本章小結(jié)\h20.5同步練習(xí)\h第21章項目實戰(zhàn)——基于分層架構(gòu)的多版本iPhone計算器\h21.1應(yīng)用分析與設(shè)計\h21.1.1應(yīng)用概述\h21.1.2需求分析\h21.1.3原型設(shè)計\h21.1.4分層架構(gòu)設(shè)計\h21.1.5應(yīng)用設(shè)計\h21.2創(chuàng)建工程\h21.3業(yè)務(wù)邏輯層開發(fā)\h21.3.1創(chuàng)建CalcLogic.swift文件\h21.3.2枚舉類型Operator\h21.3.3CalcLogic類中屬性\h21.3.4CalcLogic類中構(gòu)造器和析構(gòu)器\h21.3.5CalcLogic類中更新主標簽方法\h21.3.6CalcLogic類中判斷是否包含小數(shù)點方法\h21.3.7CalcLogic類中計算方法\h21.3.8CalcLogic類中清除方法\h21.4表示層開發(fā)\h21.4.1添加圖片資源\h21.4.2改變設(shè)計界面大小\h21.4.3添加計算器背景\h21.4.4在設(shè)計界面中添加主標簽\h21.4.5在設(shè)計界面中添加按鈕\h21.4.6控件的輸出口和動作\h21.4.7視圖控制器\h21.5Objective-C版本的計算器\h21.5.1Xcode工程文件結(jié)構(gòu)比較\h21.5.2表示層比較\h21.5.3業(yè)務(wù)邏輯層比較\h21.6Swift調(diào)用Objective-C實現(xiàn)的計算器\h21.6.1在Swift工程中添加Objective-C類\h21.6.2調(diào)用代碼\h21.7Objective-C調(diào)用Swift實現(xiàn)的計算器\h21.7.1在Objective-C工程中添加Swift類\h21.7.2調(diào)用代碼\h21.8本章小結(jié)\h21.9同步練習(xí)第一部分基礎(chǔ)篇第1章準備開始當(dāng)你拿到這本書的時候,我相信你已經(jīng)下定決心開始學(xué)習(xí)Swift語言了。那么應(yīng)該怎么開始呢?這一章我們不討論技術(shù),而是告訴大家本書的結(jié)構(gòu)、書中的一些約定、開發(fā)工具,以及如何使用本書的案例。1.1本書學(xué)習(xí)路線圖本書共分為4篇:基礎(chǔ)篇、面向?qū)ο笃⑦^渡篇和實戰(zhàn)篇。如圖1-1所示,這是Swift的學(xué)習(xí)路線圖,也是本書的內(nèi)容結(jié)構(gòu)圖。圖1-1Swift學(xué)習(xí)路線圖1.2本書中的約定為了方便大家閱讀,本節(jié)會介紹一下書中示例代碼和圖示的相關(guān)約定。1.2.1示例代碼約定本書包含了大量示例代碼,我們可以從圖靈網(wǎng)站本書主頁免費注冊下載,或者從智捷教育提供的本書服務(wù)網(wǎng)站(\h)下載,解壓后會看到如圖1-2所示的目錄結(jié)構(gòu)。圖1-2源代碼文件目錄其中,ch2~ch21代表第2章到第21章的示例代碼或一些資源文件,其中工程或工作空間的命名有如下幾種形式。二級目錄標號,如“14.3析構(gòu)器”說明是14.3節(jié)中使用的“析構(gòu)器”Xcode工程或Playground文件示例。圖標為的是Playground文件,圖標為的是Xcode工程。三級目錄標號,如“14.1.1默認構(gòu)造器”說明是14.1.1節(jié)中使用的“默認構(gòu)造器”。帶有“~”的情況,如“2.2.2~2.2.3HelloWorld”說明是2.2.2節(jié)到2.2.3節(jié)共同使用的HelloWorld工程或Playground文件示例。ch20目錄下只有一個HelloWorld目錄,沒有標號,說明第20章整章都使用HelloWorld這個示例。1.2.2圖示的約定為了更形象有效地說明知識點或描述操作,本書添加了很多圖示,下面簡要說明圖示中一些符號的含義。圖中的圈框。有時讀者會看到如圖1-3所示的圈框,框中的內(nèi)容是選中的內(nèi)容或重點說明的內(nèi)容。圖1-3圖中圈框圖中的箭頭。如圖1-4所示,實線箭頭用于說明用戶的動作,一般箭尾是動作開始的地方,箭頭指向動作結(jié)束的地方。圖1-5所示的虛線箭頭在書中用得比較多,常用來描述設(shè)置控件的屬性等操作。圖1-4圖中實線箭頭圖1-5圖中虛線箭頭圖中手勢。為了描述操作,我們在圖中放置了等手勢符號,這說明點擊了此處的按鈕,如圖1-6所示。圖1-6圖中手勢1.3Xcode開發(fā)工具蘋果公司于2008年3月6日發(fā)布了iPhone和iPodtouch的應(yīng)用程序開發(fā)包,其中包括了Xcode開發(fā)工具、iPhoneSDK和iPhone手機模擬器。第一個Beta版本是iPhoneSDK1.2b1(build5A147p),發(fā)布后可以立即使用,但是同時推出的AppStore所需要的固件更新直到2008年7月11日才發(fā)布。編寫本書時,iOSSDK8正式版本已經(jīng)發(fā)布。MacOSX和iOS開發(fā)工具主要是Xcode。自從Xcode3.1發(fā)布以后,Xcode就成為iPhone軟件開發(fā)工具包的開發(fā)環(huán)境。Xcode可以開發(fā)MacOSX和iOS應(yīng)用程序,其版本是與SDK相互對應(yīng)的。例如,Xcode3.2.5與iOSSDK4.2對應(yīng),Xcode4.1與iOSSDK4.3對應(yīng),Xcode4.2與iOSSDK5對應(yīng),Xcode4.5和Xcode4.6與iOSSDK6對應(yīng),Xcode5與iOSSDK7對應(yīng),Xcode6與iOSSDK8對應(yīng)。在Xcode4.1之前,還有一個配套使用的工具InterfaceBuilder,它是Xcode套件的一部分,用來設(shè)計窗體和視圖,通過它可以“所見即所得”地拖曳控件并定義事件等,其數(shù)據(jù)以XML的形式存儲在xib文件中。在Xcode4.1之后,InterfaceBuilder成為了Xcode的一部分,與Xcode集成在一起。本書介紹的Swift開發(fā)語言使用Xcode6.1工具進行學(xué)習(xí)和編寫,后面在介紹iOS應(yīng)用開發(fā)時也會使用Xcode。1.3.1Xcode安裝和卸載Xcode必須安裝在MacOSX系統(tǒng)上,Xcode的版本與MacOSX系統(tǒng)版本有著嚴格的對應(yīng)關(guān)系,Xcode6要求MacOSX版本在10.9.2以上。安裝可以通過MacOSX的Dock啟動AppStore,如圖1-7所示。如果我們需要安裝軟件或查詢軟件則需要用戶登錄,這個用戶就是你的AppID,彈出的登錄對話框如圖1-8所示。如果你沒有登錄AppID,可以點擊“創(chuàng)建AppID”按鈕創(chuàng)建。圖1-7應(yīng)用啟動AppStore界面圖1-8AppStore用戶登錄界面之后,我們可以在右上角的搜索欄中輸入要搜索的軟件或工具名稱“Xcode”關(guān)鍵字,搜索結(jié)果如圖1-9所示。圖1-9搜索Xcode工具點擊“Xcode”進入Xcode信息介紹界面,如圖1-10所示,點擊“Install”按鈕開始安裝。圖1-10Xcode安裝提示如果想使用測試版本的Xcode,不能通過AppStore下載和安裝,AppStore所能下載的都是正式發(fā)布版本,測試版本的Xcode只有蘋果開發(fā)者通過開發(fā)者賬號才能下載。圖1-11所示是Xcode測試版下載頁面。如果沒有開發(fā)者賬號,大家可以到本書網(wǎng)站(\h)下載。圖1-11Xcode測試版下載頁面卸載Xcode非常簡單,事實上只需要在MacOSX應(yīng)用程序中直接刪除就可以了。如圖1-12所示,打開應(yīng)用程序,右鍵選擇“Xcode”彈出菜單,選擇“移到廢紙簍”刪除Xcode應(yīng)用。如果想徹底刪除,只需清空廢紙簍就可以了。圖1-12Xcode卸載1.3.2Xcode界面打開Xcode6工具,看到的主界面如圖1-13所示。該界面主要分成3個區(qū)域,①號區(qū)域是工具欄,其中的按鈕可以完成大部分工作。②號區(qū)域是導(dǎo)航欄,主要是對工作空間中的內(nèi)容進行導(dǎo)航。③號區(qū)域是代碼編輯區(qū),我們的編碼工作就是在這里完成的。在導(dǎo)航欄上面還有一排按鈕,如圖1-14所示,默認選中的是“文件”導(dǎo)航面板。關(guān)于各個按鈕的具體用法,我們會在以后用到的時候詳細介紹。圖1-13Xcode主界面圖1-14Xcode導(dǎo)航面板在選中導(dǎo)航面板時,導(dǎo)航欄下面也有一排按鈕,如圖1-15所示。這是輔助按鈕,它們的功能都與該導(dǎo)航面板內(nèi)容相關(guān)。對于不同的導(dǎo)航面板,這些按鈕也是不同的。圖1-15導(dǎo)航面板的輔助按鈕此外,學(xué)習(xí)Swift還可以使用Playground進行編寫和運行,它也是Xcode6開發(fā)工具之一,我們將在第2章介紹。1.4如何使用API幫助對于初學(xué)者來說,學(xué)會在Xcode中使用API幫助文檔是非常重要的。下面我們通過一個例子來介紹API幫助文檔的用法。在編寫HelloWorld程序時,可以看到ViewController.swift的代碼,具體如下所示:importUIKit

classViewController:UIViewController{

overridefuncviewDidLoad(){

super.viewDidLoad()

//Doanyadditionalsetupafterloadingtheview,typicallyfromanib.

}

overridefuncdidReceiveMemoryWarning(){

super.didReceiveMemoryWarning()

//Disposeofanyresourcesthatcanberecreated.

}

}

如果我們對于didReceiveMemoryWarning方法感到困惑,就可以查找?guī)椭臋n。如果只是簡單查看幫助信息,可以選中該方法,然后選擇右邊的快捷幫助檢查器,如圖1-16所示。圖1-16Xcode快捷幫助檢查器在打開的Xcode快捷幫助檢查器窗口中,可以看到該方法的描述,其中包括使用的iOS版本、相關(guān)主題以及一些相關(guān)示例。這里需要說明的是,如果需要查看官方的示例,直接從這里下載即可。如果想查詢比較完整的、全面的幫助文檔,可以按住Alt鍵雙擊didReceiveMemoryWarning方法名,這樣就會打開一個XcodeAPI幫助搜索結(jié)果窗口,如圖1-17所示。然后選擇感興趣的主題,進入API幫助界面,如圖1-18所示。圖1-17XcodeAPI幫助搜索結(jié)果窗口圖1-18XcodeAPI幫助界面API幫助文檔還提供給我們一些官方示例,在左邊的導(dǎo)航面板中可以找到相關(guān)的SampleCode,如圖1-19所示。單擊展開“SampleCode”找到相關(guān)示例工程并單擊,在右邊內(nèi)容窗口中可以看到關(guān)于該示例的描述,如果單擊“OpenProject”按鈕,就可以打開并下載這個示例工程。圖1-19官方案例1.5本章小結(jié)通過對本章內(nèi)容的學(xué)習(xí),我們可以了解到本書的學(xué)習(xí)路線圖,熟悉本書中的一些約定,便于對本書的學(xué)習(xí),還可以掌握Xcode開發(fā)工具的安裝和卸載,并熟練使用API文檔。1.6同步練習(xí)1.介紹說明Xcode界面中各個區(qū)域的作用。2.請使用Xcode中的API幫助文檔,找UIViewController關(guān)鍵字的相關(guān)幫助信息。第2章第一個Swift程序從控制臺輸出“HelloWorld”是我學(xué)習(xí)C語言的第一步,也是我人生中非常重要的一步。多年后的今天,我仍希望以HelloWorld作為第一步,與大家共同開啟一個神奇、瑰麗的世界——Swift編程。本章以HelloWorld作為切入點,向大家系統(tǒng)介紹如何使用Xcode的Playground編寫和運行Swift程序代碼。2.1使用Playground編寫編寫和運行Swift程序有多種方式,我們可以通過在Xcode中創(chuàng)建一個iOS或MacOSX工程來實現(xiàn),也可以通過使用Xcode6提供的Playground來實現(xiàn)。在學(xué)習(xí)階段,我推薦大家使用Playground工具編寫和運行Swift程序。2.1.1編程利器PlaygroundPlayground離不開Xcode6,它是蘋果在Xcde6中添加的新功能。使用Xcode創(chuàng)建工程編寫和運行程序,目的是為了使最終的程序編譯和發(fā)布,而使用Playground的目的是為了學(xué)習(xí)、測試算法、驗證想法和可視化地看到運行結(jié)果。圖2-1所示是一個Playground程序運行界面,其中①區(qū)域是代碼編寫區(qū)域,②區(qū)域是運行結(jié)果區(qū)域,③區(qū)域是時間軸(timeline)區(qū)域。時間軸可以查看程序從上到下按照時間運行的結(jié)果,不同時間階段運行的結(jié)果可以通過文本、圖形和曲線圖表等方式展示給開發(fā)人員。圖2-1Playground界面2.1.2編寫HelloWorld程序下面我們具體介紹如何使用Playground編寫HelloWorld程序。首先,打開Xcode6的歡迎界面(如圖2-2所示)。一般第一次啟動Xcode6就可以看到這個界面,如果沒有,可以通過菜單Windows→WelcometoXcode打開。圖2-2Xcode6歡迎界面在圖2-2所示的歡迎界面中,單擊“Getstartedwithaplayground”彈出如圖2-3所示的對話框,在Name中輸入文件名“MyPlayground”,這是我們要保存的文件名,在Platform中選擇“iOS”,然后單擊“Next”按鈕,彈出圖2-4所示的界面,保存文件對話框。完成之后可以單擊“Create”按鈕創(chuàng)建Playground,創(chuàng)建成功后界面如圖2-5所示。圖2-3輸入文件名圖2-4選擇保存文件目錄圖2-5新建Playground界面我們在圖2-5所示的界面就可以編輯了,其中模板已經(jīng)生成了一些代碼,修改代碼如下:importUIKit

varstr="HelloWorld"

println(str)

代碼修改完成后,馬上就會編譯運行,但是我們在右邊只能看到str變量情況,不能看到println輸出結(jié)果,如圖2-6所示。此時可以單擊“HelloWorld”后面的“ValueHistory”按鈕,打開時間軸,如圖2-7所示。圖2-6修改后的Playground界面圖2-7打開Playground時間軸界面從圖2-7所示的時間軸可以看到輸出的結(jié)果。其中,ConsoleOutput是println函數(shù)的輸出結(jié)果。我們還可以通過助手編輯器打開Playground時間軸界面,具體操作過程如圖2-8所示。右鍵單擊標題欄,在菜單中選中“IconandText”,然后在出現(xiàn)的工具欄中,單擊打開助手編輯器。在助手編輯器中也有時間軸界面。圖2-8通過助手編輯器打開Playground時間軸界面2.2代碼解釋Swift實現(xiàn)HelloWorld的方式比C和Objective-C等語言的實現(xiàn)要簡單得多,下面我們詳細解釋一下代碼。1.importUIKit語句importUIKit表示引入UIKit框架,類似于Objective-C中的#import和C中的#include。至于后面引入何種UIKit框架,就需要我們查找API來確定了。就本例而言,我們根本不需要UIKit框架,不過導(dǎo)入也沒關(guān)系。2.varstr="HelloWorld"聲明str變量,var表示聲明變量。在var中并不能看出變量是什么類型,但Swift可以通過賦值的類型推斷出變量的類型。由于我們賦值的是"HelloWorld"字符串,因此可知str是字符串變量。我們還應(yīng)該注意到語句結(jié)束時沒有出現(xiàn)像C和Objective-C等語言結(jié)束時的分號(;)。3.println(str)println是一個函數(shù),能夠?qū)⒆兞炕蛄枯敵龅娇刂婆_,類似于C中的println函數(shù)和Objective-C中的NSLog函數(shù)。有關(guān)格式化輸出的問題我們會在后面再介紹。這樣我們通過短短的3行代碼實現(xiàn)了一個HelloWorld輸出的功能,事實上我們還可以寫得更少。2.3本章小結(jié)通過對本章內(nèi)容的學(xué)習(xí),我們可以了解到如何使用Xcode的Playground編寫和運行Swift程序代碼,了解Swift的程序結(jié)構(gòu),并熟悉Playground工具的使用。2.4同步練習(xí)1.介紹說明Playground界面中各個區(qū)域的作用。2.請使用Xcode的Playground編寫一個輸出HelloSwift字符串的Swift程序,并解釋代碼的含義。第3章Swift基本語法本章主要為大家介紹Swift的一些基本語法,其中包括標識符和關(guān)鍵字、常量、變量、表達式和注釋等內(nèi)容。3.1標識符和關(guān)鍵字任何一種計算機語言都離不開標識符和關(guān)鍵字,下面我們將詳細介紹Swift標識符和關(guān)鍵字。3.1.1標識符標識符就是給變量、常量、方法、函數(shù)、枚舉、結(jié)構(gòu)體、類、協(xié)議等指定的名字。構(gòu)成標識符的字母均有一定的規(guī)范,Swift語言中標識符的命名規(guī)則如下:區(qū)分大小寫,Myname與myname是兩個不同的標識符;標識符首字符可以以下劃線(_)或者字母開始,但不能是數(shù)字;標識符中其他字符可以是下劃線(_)、字母或數(shù)字。例如,identifier、userName、User_Name、_sys_val、身高等為合法的標識符,而2mail、room#和class為非法的標識符。其中,使用中文“身高”命名的變量是合法的。注意Swift中的字母采用的是Unicode編碼1。Unicode叫做統(tǒng)一編碼制,它包含了亞洲文字編碼,如中文、日文、韓文等字符,甚至是我們在聊天工具中使用的表情符號,如等,這些符號事實上也是Unicode,而非圖片。這些符號在Swift中都可以使用。1Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案。Unicode用數(shù)字0-0x10FFFF來映射這些字符,最多可以容納1114112個字符,或者說有1114112個碼位?!俣劝倏芢h/view/2602518.htm如果一定要使用關(guān)鍵字作為標識符,可以在關(guān)鍵字前后添加重音符號(`),例如:其中class是關(guān)鍵字,事實上重音符號(`)不是標識符的一部分,它也可以用于其他標識符,如π和`π`是等價的。因此使用關(guān)鍵字作為標識符是一種很不好的編程習(xí)慣。3.1.2關(guān)鍵字關(guān)鍵字是類似于標識符的保留字符序列,除非用重音符號(`)將其括起來,否則不能用作標識符。關(guān)鍵字是對編譯器具有特殊意義的預(yù)定義保留標識符。常見的關(guān)鍵字有以下4種。與聲明有關(guān)的關(guān)鍵字:class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias和var。與語句有關(guān)的關(guān)鍵字:break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where和while。表達式和類型關(guān)鍵字:as、dynamicType、is、new、super、self、Self、Type、__COLUMN__、__FILE__、__FUNCTION__和__LINE__。在特定上下文中使用的關(guān)鍵字:associativity、didSet、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、precedence、prefix、rightset、unowned、unowned(safe)、unowned(unsafe)、weak和willSet。對于上述關(guān)鍵字,目前我們沒有必要全部知道它們的含義,但是要記?。涸赟wift中,關(guān)鍵字是區(qū)分大小寫的,因此class和Class是不同的,當(dāng)然Class不是Swift的關(guān)鍵字。3.2常量和變量我們在上一章中介紹了如何使用Swift編寫一個HelloWorld小程序,其中就用到了變量。常量和變量是構(gòu)成表達式的重要組成部分。3.2.1常量在聲明和初始化變量時,在標識符的前面加上關(guān)鍵字let,就可以把該變量指定為一個常量。顧名思義,常量是其值在使用過程中不會發(fā)生變化的量,實例代碼如下:let_Hello="Hello"

_Hello標識符就是常量,只能在初始化的時候被賦值,如果我們再次給_Hello賦值,代碼如下:_Hello="Hello,World"

則程序會報錯,如圖3-1所示,時間軸中顯示了錯誤信息。圖3-1時間軸中錯誤信息從錯誤信息可以獲知_Hello是let分配的值,不能被賦值。3.2.2變量在Swift中聲明變量,就是在標識符的前面加上關(guān)鍵字var,實例代碼如下:varscoreForStudent=0.0

該語句聲明Double類型scoreForStudent變量,并且初始化為0.0。如果在一個語句中聲明和初始化了多個變量,那么所有的變量都具有相同的數(shù)據(jù)類型:varx=10,y=20

在多個變量的聲明中,我們也能指定不同的數(shù)據(jù)類型:varx=10,y=true

其中x為整型,y為布爾型。3.2.3命名規(guī)范在使用常量和變量的時候,要保證它們的命名符合規(guī)范,這樣程序才具有良好的可讀性。這也是一種良好的編程習(xí)慣。1.常量名基本數(shù)據(jù)類型的常量名全為大寫,如果由多個單詞構(gòu)成,則可以用下劃線隔開,例如:letYEAR=60

letWEEK_OF_MONTH=3

2.變量名變量的命名有多種風(fēng)格,主要以清楚易懂為主。有些程序員為了方便,使用單個字母來作為變量名稱,如j和i等,這會為日后程序維護帶來困難,變量同名的概率也會增加。單個字母變量一般只用于循環(huán)變量,因為它們只作用于循環(huán)體內(nèi)。在過去,計算機語言對變量名稱的長度會有所限制,但現(xiàn)在已經(jīng)沒有這種限制了,因此我們鼓勵用清楚的名稱來表明變量的作用,通常會以小寫字母作為開始,其余單詞首字母大寫,例如:varmaximumNumberOfLoginAttempts=10

varcurrentLoginAttempt=0

這樣的名稱可以令變量的作用一目了然。除了常量和變量的命名要規(guī)范之外,其他語言對象的命名也要規(guī)范。其中類名、協(xié)議名、結(jié)構(gòu)體、枚舉等類型的命名規(guī)范通常是,大寫字母作為開始,其余單詞首字母大寫,例如類名HelloWorldApp。函數(shù)和方法名往往由多個單詞合成,第一個單詞通常為動詞,以小寫字母作為開始,其余單詞首字母大寫,例如balanceAccount和isButtonPressed。3.3注釋Swift程序有兩類注釋:單行注釋(//)和多行注釋(/*...*/)。注釋方法與C、C++和Objective-C語言都是類似的,下面詳細介紹一下。1.單行注釋單行注釋可以注釋整行或者一行中的一部分,一般不用于連續(xù)多行的注釋文本。當(dāng)然,它也可以用來注釋連續(xù)多行的代碼段。以下是兩種注釋風(fēng)格的例子:ifx>1{

//注釋1

}else{

returnfalse//注釋2

}

//ifx>1{

////注釋1

//}else{

//returnfalse//注釋2

//}

提示在Xcode中對連續(xù)多行的注釋文本可以使用快捷鍵:選擇多行然后按住“command+/”鍵進行注釋。去掉注釋也是按住“command+/”鍵。2.塊注釋一般用于連續(xù)多行的注釋文本,但也可以對單行進行注釋。以下是幾種注釋風(fēng)格的例子:ifx>1{

/*注釋1*/

}else{

returnfalse/*注釋2*/

}

/*

ifx>1{

//注釋1

}else{

returnfalse//注釋2

}

*/

/*

ifx>1{

/*注釋1*/

}else{

returnfalse/*注釋2*/

}

*/

提示Swift多行注釋有一個其他語言沒有的優(yōu)點,就是可以嵌套,上述示例的最后一種情況便實現(xiàn)了多行注釋嵌套。在程序代碼中,對容易引起誤解的代碼進行注釋是必要的,但應(yīng)避免對已清晰表達信息的代碼進行注釋。需要注意的是,頻繁的注釋有時反映了代碼的低質(zhì)量。當(dāng)你覺得被迫要加注釋的時候,不妨考慮一下重寫代碼使其更清晰。3.4表達式表達式是程序代碼的重要組成部分,在Swift中,表達式有3種形式。1.不指定數(shù)據(jù)類型vara1=10

leta2=20

vara=a1>a2?"a1":"a2"

在上述代碼中,我們直接為變量或常量賦值,并沒有指定數(shù)據(jù)類型,因為在Swift中可以自動推斷數(shù)據(jù)類型。2.指定數(shù)據(jù)類型vara1:Int=10

leta2:Int=20

vara=a1>a2?"a1":"a2"

在上述代碼中,:Int是為變量和常量指定數(shù)據(jù)類型。這種寫法使程序可讀性良好,我們推薦明確指定變量和常量的數(shù)據(jù)類型。3.使用分號vara1:Int=10;vara2:Int=20

vara=a1>a2?"a1":"a2"

在Swift語言中,一條語句結(jié)束后可以不加分號也可以添加分號,但是有一種情況必須要用分號,那就是多條語句寫在一行的時候,需要通過分號來區(qū)別語句。例如:vara1:Int=10;vara2:Int=20;

3.5本章小結(jié)通過對本章內(nèi)容的學(xué)習(xí),我們可以了解到Swift語言的基本語法,其中包括標識符和關(guān)鍵字、常量、變量、表達式和注釋等內(nèi)容。3.6同步練習(xí)1.下列是Swift合法標識符的是()。A.2variableB.variable2C._whatavariableD._3_E.$anothervarF.#myvarG.體重H.I.class2.下列不是Swift關(guān)鍵字的是()。A.ifB.thenC.gotoD.whileE.caseF.__COLUMN__G.whereH.Class3.描述下列代碼的運行結(jié)果。let_Hello1="Hello"①

_Hello1="Hello,World"②

println(_Hello1)③

var_Hello2="Hello"④

_Hello2="Hello,World"⑤

println(_Hello2)⑥

4.下列有關(guān)Swift注釋使用正確的是()。A.ifx>1{

//注釋1

}else{

returnfalse//注釋2

}

B.//let_Hello1="Hello"

//_Hello1="Hello,World"

//println(_Hello1)

C./*

let_Hello1="Hello"

_Hello1="Hello,World"

println(_Hello1)

*/

D./**

let_Hello1="Hello"

_Hello1="Hello,World"

println(_Hello1)

*/

5.下列表達式不正確的是()。A.varn1:Int=10;B.varn1:Int=10C.varn1=10D.varn1:Int=10;varstr:String=20E.varn1:Int=10;varstr:String="20"F.varn1:Int=10;varstr:String='20'第4章基本運算符本章主要為大家介紹一些Swift語言的基本運算符,包括算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符和其他運算符。4.1算術(shù)運算符Swift中的算術(shù)運算符用來組織整型和浮點型數(shù)據(jù)的算術(shù)運算,按照參加運算的操作數(shù)的不同可以分為一元運算符和二元運算符。4.1.1一元運算符算術(shù)一元運算一共有3個,分別是-、++和--。-a是對a取反運算,a++或a--是在表達式運算完后,再給a加一或減一。而++a或--a是先給a加一或減一,然后再進行表達式運算。具體說明參見表4-1。表4-1一元算術(shù)運算運算符名稱說明例子-取反符號取反運算b=-a++自加一先取值再加一,或先加一再取值a++或++a--自減一先取值再減一,或先減一再取值a--或--a下面我們來看一個一元算數(shù)運算符的示例:vara=12

println(-a)①

varb=a++②

println(b)

b=++a③

println(b)

輸出結(jié)果如下:-12

12

14

上述代碼第①行是-a,是把a變量取反,結(jié)果輸出是-12。第②行代碼是把a++賦值給b變量,先賦值后++,因此輸出結(jié)果是12。第③行代碼是把++a賦值給b變量,先++后賦值,因此輸出結(jié)果是14。4.1.2二元運算符二元運算符包括:+、-、*、/和%,這些運算符對整型和浮點型數(shù)據(jù)都有效,具體說明參見表4-2。表4-2二元算術(shù)運算運算符名稱說明例子+加求a加b的和,還可用于String類型,進行字符串連接操作a+b-減求a減b的差a-b*乘求a乘以b的積a*b/除求a除以b的商a/b%取余求a除以b的余數(shù)a%b下面我們來看一個二元算數(shù)運算符的示例://聲明一個整型變量

varintResult=1+2

println(intResult)

intResult=intResult-1

println(intResult)

intResult=intResult*2

println(intResult)

intResult=intResult/2

println(intResult)

intResult=intResult+8

intResult=intResult%7

println(intResult)

println("-------")

//聲明一個浮點型變量

vardoubleResult=10.0

println(doubleResult)

doubleResult=doubleResult-1

println(doubleResult)

doubleResult=doubleResult*2

println(doubleResult)

doubleResult=doubleResult/2

println(doubleResult)

doubleResult=doubleResult+8

doubleResult=doubleResult%7

println(doubleResult)

輸出結(jié)果如下:3

2

4

2

3

-------

10.0

9.0

18.0

9.0

3.0

上述例子中分別對整型和浮點型進行了二元運算,具體語句不再贅述。4.1.3算術(shù)賦值運算符算術(shù)賦值運算符只是一種簡寫,一般用于變量自身的變化,具體說明參見表4-3。表4-3算術(shù)賦值符運算符名稱例子+=加賦值a+=b,a+=b+3-=減賦值a-=b*=乘賦值a*=b/=除賦值a/=b%=取余賦值a%=b下面我們來看一個算術(shù)賦值運算符的示例:vara=1

varb=2

a+=b//相當(dāng)于a=a+b

println(a)

a+=b+3//相當(dāng)于a=a+b+3

println(a)

a-=b//相當(dāng)于a=a-b

println(a)

a*=b//相當(dāng)于a=a*b

println(a)

a/=b//相當(dāng)于a=a/b

println(a)

a%=b//相當(dāng)于a=a%b

println(a)

輸出結(jié)果如下:3

8

6

12

6

0

上述例子中分別對整型進行了+=、-=、*=、/=和%=運算,具體語句不再贅述。4.2關(guān)系運算符關(guān)系運算是比較兩個表達式大小關(guān)系的運算,它的結(jié)果是true或false,即布爾型數(shù)據(jù)。如果表達式成立則結(jié)果為true,否則為false。關(guān)系運算符有8種:==、!=、>、<、>=、<=、===和!==,具體說明參見表4-4。表4-4關(guān)系運算符運算符名稱說明例子可應(yīng)用的類型==等于a等于b時返回true,否則false。==與=的含義不同a==b整型,浮點型,字符型串,布爾型等值類型比較!=不等于與==恰恰相反a!=b整型,浮點型,字符型串,布爾型等值類型比較>大于a大于b時返回true,否則falsea>b整型,浮點型,字符型串<小于a小于b時返回true,否則falsea<b整型,浮點型,字符型串>=大于等于a大于等于b時返回true,否則falsea>=b整型,浮點型,字符型串<=小于等于a小于等于b時返回true,否則falsea<=b整型,浮點型,字符型串===恒等于a與b同引用同一個實例時返回true,否則false。===與==的含義不同。==是比較兩個引用的內(nèi)容是否是同一個實例a===b主要用于引用數(shù)據(jù)比較!==不恒等于與===恰恰相反a!==b主要用于引用數(shù)據(jù)比較下面我們來看一個關(guān)系運算符的示例:varvalue1=1

varvalue2=2

ifvalue1==value2{

println("value1==value2")

}

ifvalue1!=value2{

println("value1!=value2")

}

ifvalue1>value2{

println("value1>value2")

}

ifvalue1<value2{

println("value1<value2")

}

ifvalue1<=value2{

println("value1<=value2")

}

letname1="world"

letname2="world"

ifname1==name2{①

println("name1==name2")

}

leta1=[1,2]//數(shù)組類型常量

leta2=[1,2]//數(shù)組類型常量

ifa1==a2{②

println("a1==a2")

}

ifa1===a2{③

println("a1===a2")

}

輸出結(jié)果如下:value1!=value2

value1<value2

value1<=value2

name1==name2

a1==a2

上述例子中,第①行是比較兩個字符串內(nèi)容是否相等,注意字符串String類型不能使用===進行比較,因為String不是引用類型。第②行代碼是比較兩個數(shù)組內(nèi)容是否相等,我們會發(fā)現(xiàn)結(jié)果是相等的。第③行代碼是比較兩個數(shù)組是否相等(即是否是同一個實例),我們會發(fā)現(xiàn)結(jié)果是不相等的。提示===和!==一般不用于引用類型之外的其他類型的比較。由于Swift中引用類型只有類,所以===和!==一般只比較類的實例,而結(jié)構(gòu)體不是引用類型,一般不能比較,但是Array(數(shù)組)結(jié)構(gòu)體是例外的一個,它雖然是結(jié)構(gòu)體,但它可以使用===和!==進行比較。所以上述代碼第③行并不會有編譯錯誤,如果我們將第②行代碼改為===進行比較,則會發(fā)生編譯錯誤。4.3邏輯運算符邏輯運算符是對布爾型變量進行運算,其結(jié)果也是布爾型,具體說明參見表4-5。表4-5關(guān)系運算符運算符名稱例子說明可應(yīng)用的類型!邏輯反!aa為true時,值為false,a為false時,值為true布爾型&&短路與a&&bab全為true時,計算結(jié)果為true,否則為false布爾型||短路或a||bab全為false時,計算結(jié)果為false,否則為true布爾型&&和||都具有短路計算的特點。例如x&&y,如果x為false,則不計算y(因為不論y為何值,“與”操作的結(jié)果都為false)。而對于x||y,如果x為true,則不計算y(因為不論y為何值,“或”操作的結(jié)果都為true)。所以,我們把&&稱為“短路與”、把||稱為“短路或”的原因就是,它們在計算過程中就像電路短路一樣采用最優(yōu)化的計算方式,從而提高了效率。為了進一步理解它們的區(qū)別,我們看看下面的例子:vari=0

vara=10

varb=9

if(a>b)||(i++==1){//換成|試一下①

println("或運算為true")②

}else{

println("或運算為false")③

}

println("i=\(i)")④

i=0;

if(a<b)&&(i++==1){//換成&試一下⑤

println("與運算為true")⑥

}else{

println("與運算為false")⑦

}

println("i=\(i)")⑧

上述代碼運行輸出結(jié)果如下:或運算為true

i=0

與運算為false

i=0

其中,第①行代碼是進行短路或計算,由于(a>b)是true,后面的表達式(i++==1)不再計算,因此結(jié)果i不會加一,第④行輸出的結(jié)果為i=0。如果我們把第①行短路或換成邏輯或,結(jié)果則是i=1。類似地,第⑤行代碼是進行短路與計算,由于(a<b)是false,后面的表達式(i++==1)不再計算,因此結(jié)果i不會加一,第⑧行輸出的結(jié)果為i=0。如果我們把第⑤行短路與換成邏輯與,結(jié)果則是i=1。4.4位運算符位運算是以二進位(bit)為單位進行運算的,操作數(shù)和結(jié)果都是整型數(shù)據(jù)。位運算符有如下幾個運算符:&,|,^,~,>>,<<,具體說明參見表4-6。表4-6位運算符運算符名稱例子說明~位反~x將x的值按位取反&位與x&yx與y位進行位與運算|位或x|yx與y位進行位或運算^位異或x^yx與y位進行位異或運算>>右移x>>ax右移a位,無符號整數(shù)高位采用0補位,有符號整數(shù)高位采用符號位補位<<左移x<<ax左移a位,低位位補0為了進一步理解它們,我們看看下面的例子:leta:UInt8=0b10110010①

letb:UInt8=0b01011110②

println("a|b=\(a|b)")//11111110③

println("a&b=\(a&b)")//00010010④

println("a^b=\(a^b)")//11101100⑤

println("~a=\(~a)")//01001101⑥

println("a>>2=\(a>>2)")//00101100⑦

println("a<<2=\(a<<2)")//11001000⑧

letc:Int8=-0b1100⑨

println("c>>2=\(c>>2)")//-00000011⑩

println("c<<2=\(c<<2)")//-00110000?

輸出結(jié)果如下:a|b=254

a&b=18

a^b=236

~a=77

a>>2=44

a<<2=200

c>>2=-3

c<<2=-48

上述代碼中,我們在第①行和第②行分別定義了UInt8(無符號8位整數(shù))變量a和b,0b01011110表示二進制整數(shù),前面的0b前綴表示二進制。在第⑨行定義了c為Int8(有符號8位整數(shù)),它右位移的時候,高位使用符號位占位的。注意輸出結(jié)果是十進制的。代碼第③行println("a|b=\(a|b)")是進行位或運算,結(jié)果是二進制的11111110,它的運算過程如圖4-1所示,從圖中可見,a和b按位進行或計算,只要有一個為1,這一位就為1,否則為0。圖4-1位或運算代碼第④行println("a&b=\(a&b)")是進行位與運算,結(jié)果是二進制的00010010,它的運算過程如圖4-2所示,從圖中可見,a和b按位進行與計算,只有兩位全部為1,這一位才為1,否則為0。圖4-2位與運算代碼第⑤行println("a^b=\(a^b)")是進行位異或運算,結(jié)果是二進制的11101100,它的運算過程如圖4-3所示,從圖中可見,a和b按位進行異或計算,只有兩位相反,這一位才為1,否則為0。圖4-3異或位運算代碼第⑦行println("a>>2=\(a>>2)")是進行右位移2位運算,結(jié)果是二進制的00101100,它的運算過程如圖4-4所示,從圖中可見,a的低位被移除掉,高位用0補位。圖4-4右位移2位運算代碼第⑧行println("a<<2=\(a<<2)")是進行左位移2位運算,結(jié)果是二進制的11001000,它的運算過程如圖4-5所示,從圖中可見,a的高位被移除掉,低位用0補位。圖4-5左位移2位運算通過上面的詳細解釋,相信大家已經(jīng)能夠理解上述代碼的運行結(jié)果了,其他的不再贅述。4.5其他運算符除了前面介紹的主要運算符之外,還有一些其他運算符,如下所示。三元運算符(?:):例如x?y:z;,其中x,y和z都為表達式。括號:起到改變表達式運算順序的作用,它的優(yōu)先級最高。引用號(.):實例調(diào)用屬性、方法等操作符。賦值號(=):賦值時用等號運算符(=)進行的。下標運算符[]。箭頭(->):說明函數(shù)或方法返回值類型。逗號運算符(,):用于集合分割元素。冒號運算符(:):用于字典集合分割“鍵值”對。示例代碼如下:letscore:UInt8=80

letresult=score>60?"及格":"不及格"http://三元運算符(?:)

println(result)

vararr=[93,5,3,55,57]//使用逗號運算符(,)

println(arr[2])//下標運算符[]

varairports=["TYO":"Tokyo","DUB":"Dublin"]//使用冒號運算符(:)

其他運算符將在后面學(xué)習(xí)的過程中再給大家介紹。4.6本章小結(jié)通過對本章內(nèi)容的學(xué)習(xí),我們可以了解到Swift語言的基本運算符,這些算符包括算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符和其他運算符。4.7同步練習(xí)1.下列程序段執(zhí)行后,t5的結(jié)果是()。vart1=9,t2=11,t3=8

vart4,t5:Int

t4=t1>t2?t1:t2+t1

t5=t4>t3?t4:t3

A.8B.20C.11D.92.下列程序段執(zhí)行后,b,x,y的值分別是()。varx=6,y=8

varb:Bool

b=x>y&&x++==--y

A.true,6,8B.false,7,7C.true,7,7D.false,6,83.下列執(zhí)行程序段后,b,x,y的值分別是()。varx=6,y=8

varb:Bool

b=x++==--y&&x>y

A.true,6,8B.false,7,7C.true,7,7D.false,6,84.設(shè)有定義varx=3.5,y=4.6,z=5.7,則以下的表達式中,值為true的是()。A.x>y||x>zB.x!=yC.z>(y+x)D.x<y&&!(x>z)5.下列程序段執(zhí)行后,b3的結(jié)果是()。varb1=true,b2,b3:Bool

b3=b1?b1:b2

A.0B.1C.trueD.falseE.無法編譯6.下列關(guān)于使用“<<”和“>>”操作符的結(jié)果正確的是()。A.1010000000000000>>4的結(jié)果是0000101000000000B.1010000000000000>>4的結(jié)果是1111101000000000C.0000101000000000<<2的結(jié)果是0010100000000000D.0000101000000000<<2的結(jié)果是00001010000000007.下列表達式中哪兩個相對?A.16>>2B.16/2^2C.16*4D.16<<28.下列程序段執(zhí)行后,輸出結(jié)果是()。提示:String是結(jié)構(gòu)體,它是值類型。vara:String="123",b:String="123"

println(a===b)

a=b

println(a===b)

A.falseB.falseC.trueD.truefalsetruetruefalseE.編譯錯誤9.下列程序段執(zhí)行后,輸出結(jié)果是()。提示:NSString是類,它是引用數(shù)據(jù)類型。vara:NSString="123",b:NSString="123"

println(a===b)

a=b

println(a===b)

A.falseB.falseC.trueD.trueE.編譯錯誤falsetruetruefalse10.下列程序段執(zhí)行后,輸出結(jié)果是()。vara1:String="123",b1:String="123"

vara2:NSString="123",b2:NSString="123"

println(a1==b1)

println(a2!==b2)

A.falseB.falseC.trueD.trueE.編譯錯誤falsetruetruefalse第5章基本數(shù)據(jù)類型我們在前面的章節(jié)中使用到了一些數(shù)據(jù)類型,例如UInt8、Int8和Double等,本章將詳細介紹這些數(shù)據(jù)類型。Swift中包括了所有C和Objective-C語言中定義的數(shù)據(jù)類型,并且還有一些獨有的數(shù)據(jù)類型,如元組(tuple)等。5.1Swift數(shù)據(jù)類型Swift中的數(shù)據(jù)類型包括:整型、浮點型、布爾型、字符串、元組、集合、枚舉、結(jié)構(gòu)體和類等。這些類型按照參數(shù)傳遞方式的不同可以分為:值類型和引用類型。值類型就是在賦值或給函數(shù)傳遞參數(shù)時候,創(chuàng)建一個副本,把副本傳遞過去,這樣在函數(shù)的調(diào)用過程中不會影響原始數(shù)據(jù)。引用類型就是在賦值或給函數(shù)傳遞參數(shù)時候,把本身數(shù)據(jù)傳遞過去,這樣在函數(shù)的調(diào)用過程中會影響原始數(shù)據(jù)。在上述數(shù)據(jù)類型中,整型、浮點型、布爾型、字符串、元組、集合、枚舉和結(jié)構(gòu)體屬于值類型,而類屬于引用類型。本章將重點介紹整型、浮點型、布爾型和元組等基本數(shù)據(jù)類型。5.2整型Swift提供8、16、32、64位形式的有符號及無符號整數(shù)。這些整數(shù)類型遵循C語言的命名規(guī)約,如8位無符號整數(shù)的類型為UInt8,32位有符號整數(shù)的類型為Int32。我們歸納了Swift中的整型,參見表5-1。表5-1整型數(shù)據(jù)類型名稱說明Int8有符號8位整型Int16有符號16位整型Int32有符號32位整型Int64有符號64位整型Int平臺相關(guān)有符號整型在32位平臺,Int與Int32寬度一致

在64位平臺,Int與Int64寬度一致UInt8無符號8位整型UInt16無符號16位整型UInt32無符號32位整型UInt64無符號64位整型UInt平臺相關(guān)無符號整型在32位平臺,UInt與UInt32寬度一致

在64位平臺,UInt與UInt64寬度一致除非要求固定寬的整型,否則一般我們只使用Int或UInt,這些類型能夠與平臺保持一致。下面我們來看一個整型示例:println("UInt8range:\(UInt8.min)~\(UInt8.max)")

println("Int8range:\(Int8.min)~\(Int8.max)")

println("UIntrange:\(UInt.min)~\(UInt.max)")

println("UInt64range:\(UInt64.min)~\(UInt64.max)")

println("Int64range:\(Int64.min)~\(Int64.max)")

println("Intrange:\(Int.min)~\(Int.max)")

輸出結(jié)果如下:UInt8range:0~255

Int8range:-128~127

UIntrange:0~18446744073709551615

UInt64range:0~18446744073709551615

Int64range:-9223372036854775808~9223372036854775807

Intrange:-9223372036854775808~9223372036854775807

上述代碼是通過整數(shù)的min和max屬性計算各個類型的范圍。min屬性獲得當(dāng)前整數(shù)的最小值,max屬性獲得當(dāng)前整數(shù)的最大值。由于程序運行的電腦是64位的,UInt運行的結(jié)果與UInt64相同,Int運行的結(jié)果與Int64相同。我們在前面的學(xué)習(xí)過程中聲明過變量,有時明確指定數(shù)據(jù)類型,有時則沒有指定,例如下面的代碼:varageForStudent=30

varscoreForStudent:Int=90

變量ageForStudent沒有指定任何數(shù)據(jù)類型,但是我把30賦值給它,30表示Int類型30,因此ageForStudent類型就被確定為Int,這就是Swift提供的類型推斷功能。此后我們就不能把非Int數(shù)值賦值給ageForStudent。如下代碼是有編譯錯誤的:varageForStudent=30

ageForStudent="20"

代碼ageForStudent="20"會發(fā)生編譯錯誤,這是因為我們試圖將20字符串賦值給Int類型的ageForStudent變量。5.3浮點型浮點型主要用來儲存小數(shù)數(shù)值,也可以用來儲存范圍較大的整數(shù)。它分為浮點數(shù)(float)和雙精度浮點數(shù)(double)兩種,雙精度浮點數(shù)所使用的內(nèi)存空間比浮點數(shù)多,可表示的數(shù)值范圍與精確度也比較大。下面我們歸納Swift中的浮點型,如表5-2所示。表5-2浮點型數(shù)據(jù)類型名稱說明Float32位浮點數(shù)不需要很多大的浮點數(shù)時候使用Double64位浮點數(shù)默認的浮點數(shù)下面我們來看一個浮點型示例:varmyMoney:Float=300.5;①

varyourMoney:Double=360.5;②

letpi=3.14159③

上述代碼第①行明確指定變量myMoney是Float類型,第②行代碼明確指定變量yourMoney是Double類型,第③行pi沒有明確數(shù)據(jù)類型,但是我們給它賦值為3.14159,Swift編譯器會自動推斷出它是Double類型,注意

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論