




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Swift 的基本語(yǔ)法1.基本語(yǔ)法1.1變量和常量:1.1.1定義let 定義常量,一旦賦值不允許再修改.Var定義變量,賦值之后仍然可以修改.1.1.2自動(dòng)推導(dǎo):swift能夠根據(jù)右邊的代碼,推導(dǎo)出變量的類(lèi)型通常在開(kāi)發(fā)的時(shí)候不需要指定變量類(lèi)型如果需要指定變量類(lèi)型,可以在變量名后使用:,然后跟上變量的類(lèi)型1.1.3 沒(méi)有隱式轉(zhuǎn)換swift 對(duì)數(shù)據(jù)類(lèi)型要求嚴(yán)格任何時(shí)候,都不允許做隱式轉(zhuǎn)換 1.1.4 let 和 var 的選擇應(yīng)該盡量先選擇常量,只有在必須修改時(shí),才修改為 var在 xcode7.0中,如果沒(méi)有修改變量, xcode 會(huì)提示修改為 let1.2 Optional 可選項(xiàng)1.2.1
2、Optional 是 Swift 的一大特色,也是 Swift 初學(xué)者最容易困惑的問(wèn)題定義變量時(shí),如果指定是可選的,表示該變量可以有一個(gè)指定類(lèi)型的值,也可以是 nil定義變量時(shí),在類(lèi)型后面添加一個(gè) ?,表示該變量是可選的變量可選項(xiàng)的默認(rèn)值是 nil常量可選項(xiàng)沒(méi)有默認(rèn)值,主要用于在構(gòu)造函數(shù)中給常量設(shè)置初始數(shù)值如果 Optional 值是 nil,不允許參與計(jì)算,只有解包(unwrap)后才能參與計(jì)算,在變量后添加一個(gè) !,可以強(qiáng)行解包1.2.2常見(jiàn)錯(cuò)誤unexpectedly found nil while unwrapping an Optional value1.2.3 ?運(yùn)算符? 運(yùn)算符可
3、以用于判斷 變量/常量 的數(shù)值是否是 nil,如果是則使用后面的值替代在使用 Swift 開(kāi)發(fā)時(shí),? 能夠簡(jiǎn)化代碼的編寫(xiě)1.3 控制流1.3.1 ifSwift 中沒(méi)有 C 語(yǔ)言中的非零即真概念在邏輯判斷時(shí)必須顯示地指明具體的判斷條件 true / false,if 語(yǔ)句條件的 () 可以省略,但是 不能省略1.3.2 三目運(yùn)算Swift 中的 三目 運(yùn)算保持了和 OC 一致的風(fēng)格1.3.3 可選項(xiàng)判斷由于可選項(xiàng)的內(nèi)容可能為 nil,而一旦為 nil 則不允許參與計(jì)算因此在實(shí)際開(kāi)發(fā)中,經(jīng)常需要判斷可選項(xiàng)的內(nèi)容是否為 nil單個(gè)可選項(xiàng)判斷 用 if條件判斷小結(jié):if let 不能與使用 &
4、;&、| 等條件判斷如果要增加條件,可以使用 where 子句注意:where 子句沒(méi)有智能提示多個(gè)可選項(xiàng)判斷用,同時(shí)判斷多個(gè)可選項(xiàng),判斷之后要對(duì)可選項(xiàng)進(jìn)行修改guardguard 是與 if let 相反的語(yǔ)法,Swift 2.0 推出在程序編寫(xiě)時(shí),條件檢測(cè)之后的代碼相對(duì)是比較復(fù)雜的使用 guard 的好處能夠判斷每一個(gè)值在真正的代碼邏輯部分,省略了一層嵌套1.3.4switchswitch 不再局限于整數(shù)switch 可以針對(duì)任意數(shù)據(jù)類(lèi)型進(jìn)行判斷不再需要 break每一個(gè) case后面必須有可以執(zhí)行的語(yǔ)句要保證處理所有可能的情況,不然編譯器直接報(bào)錯(cuò),不處理的條件可以放在 defau
5、lt 分支中每一個(gè) case 中定義的變量?jī)H在當(dāng)前 case 中有效,而 OC 中需要使用 1.4 循環(huán)oc 風(fēng)格for in 0.<10 表示0到9范圍 010 表示0到101.5 字符串在 Swift 中絕大多數(shù)的情況下,推薦使用 String 類(lèi)型String 是一個(gè)結(jié)構(gòu)體,性能更高String 目前具有了絕大多數(shù) NSString 的功能String 支持直接遍歷NSString 是一個(gè) OC 對(duì)象,性能略差Swift 提供了 String 和 NSString 之間的無(wú)縫轉(zhuǎn)換字符串拼接直接在 "" 中使用 (變量名) 的方式可以快速拼接字符串可選項(xiàng)的拼接如果
6、變量是可選項(xiàng),拼接的結(jié)果中會(huì)有 Optional為了應(yīng)對(duì)強(qiáng)行解包存在的風(fēng)險(xiǎn),蘋(píng)果提供了 ? 操作符? 操作符用于檢測(cè)可選項(xiàng)是否為 nil如果不是 nil,使用當(dāng)前值如果是 nil,使用后面的值替代String & Range 的結(jié)合在 Swift 中,String 和 Range連用時(shí),語(yǔ)法結(jié)構(gòu)比較復(fù)雜如果不習(xí)慣 Swift 的語(yǔ)法,可以將字符串轉(zhuǎn)換成 NSString 再處理1.6 集合1.6.1數(shù)組定義使用定義,for in 遍歷 下標(biāo)獲取內(nèi)容, let 定義的為不可變數(shù)組, var 定義的為可變數(shù)組數(shù)組的類(lèi)型如果初始化時(shí),所有內(nèi)容類(lèi)型一致,擇數(shù)組中保存的是該類(lèi)型的內(nèi)容如果初始化時(shí)
7、,所有內(nèi)容類(lèi)型不一致,擇數(shù)組中保存的是NSObject數(shù)組的定義和實(shí)例化使用 : 可以只定義數(shù)組的類(lèi)型實(shí)例化之前不允許添加值使用 類(lèi)型() 可以實(shí)例化一個(gè)空的數(shù)組數(shù)組的合并必須是相同類(lèi)型的數(shù)組才能夠合并開(kāi)發(fā)中,通常數(shù)組中保存的對(duì)象類(lèi)型都是一樣的!1.6.2字典 定義同樣使用 定義字典let 不可變字典var 可變字典String : NSObject 是最常用的字典類(lèi)型/: String : NSObject 是最常用的字典類(lèi)型var dict = "name": "zhangsan", "age": 18 賦值 賦值直接使用 dic
8、tkey = value 格式 如果 key 不存在,會(huì)設(shè)置新值 如果 key 存在,會(huì)覆蓋現(xiàn)有值/: * 如果 key 不存在,會(huì)設(shè)置新值dict"title" = "boss"/: * 如果 key 存在,會(huì)覆蓋現(xiàn)有值dict"name" = "lisi"dict 遍歷 k,v 可以隨便寫(xiě) 前面的是 key 后面的是 value/: 遍歷for (k, v) in dict print("(k) (v)") 合并字典 如果 key 不存在,會(huì)建立新值,否則會(huì)覆蓋現(xiàn)有值/: 合并字典var d
9、ict1 = String: NSObject()dict1"nickname" = "大老虎"dict1"age" = 100/: 如果 key 不存在,會(huì)建立新值,否則會(huì)覆蓋現(xiàn)有值for (k, v) in dict1 dictk = vprint(dict)2函數(shù)目標(biāo) 掌握函數(shù)的定義 掌握外部參數(shù)的用處 掌握無(wú)返回類(lèi)型的三種函數(shù)定義方式代碼實(shí)現(xiàn) 函數(shù)的定義 格式 func 函數(shù)名(行參列表) -> 返回值 代碼實(shí)現(xiàn) 調(diào)用 let result = 函數(shù)名(值1, 參數(shù)2: 值2.)func sum(a: Int, b: I
10、nt) -> Int return a + blet result = sum(10, b: 20) 沒(méi)有返回值的函數(shù),一共有三種寫(xiě)法 省略 () Voidfunc demo(str: String) -> Void print(str)func demo1(str: String) -> () print(str)func demo2(str: String) print(str)demo("hello")demo1("hello world")demo2("olleh") 外部參數(shù) 在形參名前再增加一個(gè)外部參數(shù)名
11、,能夠方便調(diào)用人員更好地理解函數(shù)的語(yǔ)義 格式:func 函數(shù)名(外部參數(shù)名 形式參數(shù)名: 形式參數(shù)類(lèi)型) -> 返回值類(lèi)型 / 代碼實(shí)現(xiàn) Swift 2.0 中,默認(rèn)第一個(gè)參數(shù)名省略func sum1(num1 a: Int, num2 b: Int) -> Int return a + bsum1(num1: 10, num2: 20)閉包與 OC 中的 Block 類(lèi)似,閉包主要用于異步操作執(zhí)行完成后的代碼回調(diào),網(wǎng)絡(luò)訪問(wèn)結(jié)果以參數(shù)的形式傳遞給調(diào)用方目標(biāo) 掌握閉包的定義 掌握閉包的概念和用法 了解尾隨閉包的寫(xiě)法 掌握解除循環(huán)引用的方法OC 中 Block 概念回顧 閉包類(lèi)似于 O
12、C 中的 Block 預(yù)先定義好的代碼 在需要時(shí)執(zhí)行 可以當(dāng)作參數(shù)傳遞 可以有返回值包含 self 時(shí)需要注意循環(huán)引用閉包的定義 定義一個(gè)函數(shù)/: 定義一個(gè) sum 函數(shù)func sum(num1 num1: Int, num2: Int) -> Int return num1 + num2sum(num1: 10, num2: 30)/: 在 Swift 中函數(shù)本身就可以當(dāng)作參數(shù)被定義和傳遞let mySum = sumlet result = mySum(num1: 20, num2: 30) 定義一個(gè)閉包 閉包 = (行參) -> 返回值 in / 代碼實(shí)現(xiàn) in 用于區(qū)分函
13、數(shù)定義和代碼實(shí)現(xiàn)/: 閉包 = (行參) -> 返回值 in / 代碼實(shí)現(xiàn) let sumFunc = (num1 x: Int, num2 y: Int) -> Int in return x + ysumFunc(num1: 10, num2: 20) 最簡(jiǎn)單的閉包,如果沒(méi)有參數(shù)/返回值,則 參數(shù)/返回值/in 統(tǒng)統(tǒng)都可以省略 代碼實(shí)現(xiàn) let demoFunc = print("hello")基本使用GCD 異步 模擬在后臺(tái)線程加載數(shù)據(jù)func loadData() dispatch_async(dispatch_get_global_queue(0, 0
14、), () -> Void in print("耗時(shí)操作 (NSThread .currentThread()") ) 尾隨閉包,如果閉包是最后一個(gè)參數(shù),可以用以下寫(xiě)法 注意上下兩段代碼, 的位置func loadData() dispatch_async(dispatch_get_global_queue(0, 0) () -> Void in print("耗時(shí)操作 (NSThread .currentThread()") 閉包的簡(jiǎn)寫(xiě),如果閉包中沒(méi)有參數(shù)和返回值,可以省略func loadData() dispatch_async(dis
15、patch_get_global_queue(0, 0) print("耗時(shí)操作 (NSThread .currentThread()") 自定義閉包參數(shù),實(shí)現(xiàn)主線程回調(diào) 添加沒(méi)有參數(shù),沒(méi)有返回值的閉包override func viewDidLoad() super.viewDidLoad() loadData print("完成回調(diào)") / MARK: - 自定義閉包參數(shù)func loadData(finished: ()->() dispatch_async(dispatch_get_global_queue(0, 0) print(&quo
16、t;耗時(shí)操作 (NSThread.currentThread()") dispatch_sync(dispatch_get_main_queue() print("主線程回調(diào) (NSThread.currentThread()") / 執(zhí)行回調(diào) finished() 添加回調(diào)參數(shù)override func viewDidLoad() super.viewDidLoad() loadData4 (html) -> () in print(html) / 加載數(shù)據(jù)/ 完成回調(diào) - 傳入回調(diào)閉包,接收異步執(zhí)行的結(jié)果func loadData4(finished:
17、(html: String) -> () dispatch_async(dispatch_get_global_queue(0, 0) print("加載數(shù)據(jù) (NSThread.currentThread()") dispatch_sync(dispatch_get_main_queue() print("完成回調(diào) (NSThread.currentThread()") finished(html: "<h1>hello world</h1>") 循環(huán)引用 建立 NetworkTools 對(duì)象class
18、 NetworkTools: NSObject / 加載數(shù)據(jù) / / - parameter finished: 完成回調(diào) func loadData(finished: () -> () print("開(kāi)始加載數(shù)據(jù).") / . finished() deinit print("網(wǎng)絡(luò)工具 88") 實(shí)例化 NetworkTools 并且加載數(shù)據(jù)class ViewController: UIViewController var tools: NetworkTools? override func viewDidLoad() super.viewD
19、idLoad() tools = NetworkTools() tools?.loadData() print("come here (self.view)") / 與 OC 中的 dealloc 類(lèi)似,注意此函數(shù)沒(méi)有() deinit print("控制器 88") 運(yùn)行不會(huì)形成循環(huán)引用,因?yàn)?loadData 執(zhí)行完畢后,就會(huì)釋放對(duì) self 的引用 修改 NetworkTools,定義回調(diào)閉包屬性/ 完成回調(diào)屬性var finishedCallBack: ()->()?/ 加載數(shù)據(jù)/ - parameter finished: 完成回調(diào)func loadData(fin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 應(yīng)屆生品質(zhì)工程師述職報(bào)告
- 2025年中國(guó)銅錢(qián)市場(chǎng)調(diào)查研究報(bào)告
- 二零二五年度人工智能企業(yè)勞動(dòng)合同雙方權(quán)利義務(wù)規(guī)范協(xié)議
- 二零二五年度藥店與醫(yī)藥咨詢公司合作協(xié)議
- 電池組裝設(shè)備培訓(xùn)課件
- 二零二五年度企業(yè)信用管理及守合同風(fēng)險(xiǎn)評(píng)估合同
- 2025年度電力系統(tǒng)運(yùn)行供用電合同全新編制
- 品質(zhì)實(shí)驗(yàn)室工作總結(jié)與計(jì)劃
- 二零二五年度打架雙方和解協(xié)議書(shū)模板(含醫(yī)療鑒定條款)
- 2025年度現(xiàn)代農(nóng)業(yè)示范區(qū)土地流轉(zhuǎn)承包合同
- 中建10t龍門(mén)吊安拆安全專(zhuān)項(xiàng)施工方案
- 國(guó)內(nèi)外測(cè)井技術(shù)現(xiàn)狀與展望文檔
- 大模型專(zhuān)題:2024大模型技術(shù)及其在金融行業(yè)的應(yīng)用探索報(bào)告
- 天津地區(qū)高考語(yǔ)文五年高考真題匯編-語(yǔ)言文字應(yīng)用
- 特殊作業(yè)安全管理監(jiān)護(hù)人專(zhuān)項(xiàng)培訓(xùn)課件
- 道路運(yùn)輸企業(yè)兩類(lèi)人員安全考核試題及答案
- 衛(wèi)生技術(shù)人員準(zhǔn)入制度
- 簡(jiǎn)單酒店裝修合同書(shū)范本(30篇)
- 2024-2030年中國(guó)核桃油行業(yè)消費(fèi)趨勢(shì)及競(jìng)爭(zhēng)格局分析研究報(bào)告
- 安全、環(huán)境、職業(yè)健康安全目標(biāo)、指標(biāo)及管理方案
- 課件:《中華民族共同體概論》第一講 中華民族共同體基礎(chǔ)理論
評(píng)論
0/150
提交評(píng)論