


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】第八節(jié)可選(Optionals)類型主標(biāo)簽
本文來自于瘋子們的開源圖書你可以在某個(gè)值可能缺失的情況下,使用可選類型??蛇x類型也就是:要么有值,等于x要么就什么都沒有注意:可選類型的概念在C和Objective-C當(dāng)中是不存在。Objective-C當(dāng)中最相近的東西就是,一個(gè)返回對象類型的函數(shù),可以返回nil.nil表示不存在一個(gè)有效的對象。但是,這個(gè)只適用于對象,對于結(jié)構(gòu)體,基本的C類型,枚舉,就不行了。對于這些類型,Objective-C的方法通常返回一個(gè)特殊值(比如NSNotFound)表示值的缺失。這種方法假設(shè)方法的調(diào)用者知道要返回一個(gè)特殊值來進(jìn)行判斷。Swift的可選類型可以讓你表示任何類型值的缺失,再也不用那些特殊的常量了。這里有個(gè)例子。Swift的String類型有個(gè)方法toInt,它可以將字符串轉(zhuǎn)成整型。但是,不是每個(gè)字符串都可以轉(zhuǎn)換成整型的。比方說,”123“可以轉(zhuǎn)換成數(shù)字123,但是"hello,world"就沒有明顯的整型可以轉(zhuǎn)成的了。下面的例子使用toInt方法,將字符串轉(zhuǎn)成整型:由于toInt方法可能會失敗,它返回一個(gè)可選類型的Int,而不是單純的Int。一個(gè)可選類型的Int寫作Int?,而不是Int.問號表示當(dāng)前變量是可選類型的,意味著變量可能包含整型值,或者根本什么都沒有(但不能包含其他的類型,比如Bool,String.記住,要么Int型,要么什么都沒有)。
你可以使用if語言來判斷一個(gè)可選類型的變量是否包含值。如果它確實(shí)包含值,那么就是true.如果它根本沒有值,那就是false.一旦你確定該可選類型的變量缺失有值的話,你就可以通過在變量名稱后面加上嘆號(!)的方式訪問潛在的值。嘆號很有效的說明了:“我知道這個(gè)可選類型確實(shí)有值,放心的用去吧”。這個(gè)就是所謂的可選類型的強(qiáng)制拆箱。注意:嘗試在一個(gè)沒有值的可選類型上使用!,會引發(fā)運(yùn)行時(shí)錯(cuò)誤。在使用!強(qiáng)制拆箱一個(gè)可選類型之前,一定要確保它有一個(gè)非nil值。你可以通過綁定一個(gè)可選類型到一個(gè)常量或者變量中,不僅可以檢測可選類型是否含有值,還可以在之后通過這個(gè)臨時(shí)變量或者常量訪問他的值。通過一個(gè)操作,就可以在If
和while當(dāng)中使用綁定來檢查可選當(dāng)中的值,同時(shí)也可以將可選的值放到變量或者常量當(dāng)中。if和while語句在流程控制當(dāng)中有詳細(xì)的描述。像下面這樣,在if語句當(dāng)中實(shí)現(xiàn)可選類型的綁定:你可以使用綁定代替強(qiáng)制拆箱,重寫上面的possibleNumber例子:上面的代碼意思就是:如果possibleNumber.toInt返回的可選Int變量包含值的話,就將可選變量的值賦給新的常量actualNumber.如果上面的轉(zhuǎn)換是成功的話,就可以在if語句當(dāng)中使用actualNumber了。它已經(jīng)用可選變量的值初始化過了,因此就沒必要在使用!了。這個(gè)例子只是使用actualNumber來打印一下轉(zhuǎn)換結(jié)果。綁定一個(gè)可選類型,既可以使用常量,也可以使用變量。如果你想在if語句當(dāng)中操作actualNumber,你也可以寫成ifvaractualNumber,那么可選類型就是作為變量了,而不是常量了。你可以通過給一個(gè)可選類型的變量賦予nil,來讓他處于沒有值的狀態(tài):注意:nil
不能用于非可選類型的常量和變量。如果要在你的代碼中處理變量或者常量缺失值的情況,一定要將他們聲明為恰當(dāng)?shù)目蛇x類型。如果你在定義可選類型的變量或者常量的時(shí)候,沒有指定默認(rèn)值的話,那么系統(tǒng)或自動(dòng)賦給它nil的。注意:Swift的nil和Objective-C中的nil是不一樣的。在Objective-C中,nil是指向一個(gè)不存在對象的指針,而在Swift當(dāng)中,nil不是一個(gè)指針,它代表某中類型值的缺失。任意類型的可選類型都可以賦予nil,而不只是對象類型的。
就像上面描述的一樣,可選類型表明一個(gè)變量或者常量允許沒有值??梢允褂胕f語句檢查一個(gè)可選類型是否有值,如果有值的話,就可以使用綁定將可選類型進(jìn)行拆箱。有時(shí)候,從你的代碼結(jié)構(gòu)當(dāng)中可以清楚的知道一個(gè)可選類型一旦服了賦了值,之后總是有值的。在這種情況下,就沒有必要每次訪問可選類型,都經(jīng)過檢查和拆箱了,因?yàn)槲覀兠鞔_的知道它一直都是有值的。我們就上面這種情況的可選類型定義為隱式拆箱的可選類型。在你想將將它變成可選的類型后面,加上嘆號(!)而不是問號(?),就可以將它定義為隱式拆箱的可選類型了。當(dāng)一個(gè)可選類型第一次定義之后,可以很明確的知道之后它一定有值的話,隱式拆箱是非常有用的。在Swift中,隱式拆箱的主要作用就是在類的初始化過程中,參考“無主引用和隱式拆箱可選類型屬性”隱式拆箱的可選類型其實(shí)就是一個(gè)普通的可選類型,只不過可以像普通的變量一樣使用,不用每次訪問的時(shí)候都拆箱了。下面的例子展示了一個(gè)可選類型的String和一個(gè)隱式拆箱的可選類型的String之間的區(qū)別:你可以把一個(gè)隱式拆箱的可選類型想象成無論什么時(shí)候使用它,你都已經(jīng)授權(quán)給他讓他自動(dòng)拆箱了。在聲明可選類型的時(shí)候,在后面加上嘆號(!),這樣你就不用每次訪問值的時(shí)候,都在后面加上嘆號(!)了。注意:如果你在訪問一個(gè)隱式拆箱的時(shí)候,它沒有值,就會觸發(fā)一個(gè)運(yùn)行時(shí)錯(cuò)誤。結(jié)果和在一個(gè)普通的可選類型后面加上嘆號時(shí)的效果是一樣的。你可以把隱式拆箱看成一個(gè)普通的可選類型來檢
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 申請班長的申請書
- 公共營養(yǎng)師復(fù)習(xí)試題
- wps勞動(dòng)合同范本
- 營養(yǎng)配餐員復(fù)習(xí)測試題
- 工會預(yù)算管理辦法、基層工會預(yù)算管理辦法練習(xí)測試卷
- 廚房承包協(xié)議合同范本
- 商場門店合同范本
- 國際鐵路技術(shù)轉(zhuǎn)讓合同范本
- 制砂合同范本
- 團(tuán)體漢服租賃合同范本
- GB/T 6967-2009工程結(jié)構(gòu)用中、高強(qiáng)度不銹鋼鑄件
- 公司發(fā)文登記表模板
- 法考-01刑法-案例指導(dǎo)用書【】
- 《考古學(xué)》第二章-田野考古課件
- 膀胱鏡檢查記錄
- 檔案銷毀清冊
- 固體物理21固體的結(jié)合課件
- 水平定向鉆施工規(guī)范方案
- 細(xì)支氣管肺泡癌的影像診斷(61頁)
- 2022年東北大學(xué)現(xiàn)代控制理論試題及答案
- X射線的物理學(xué)基礎(chǔ)-
評論
0/150
提交評論