


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】第八節(jié)可選(Optionals)類型主標簽
本文來自于瘋子們的開源圖書你可以在某個值可能缺失的情況下,使用可選類型??蛇x類型也就是:要么有值,等于x要么就什么都沒有注意:可選類型的概念在C和Objective-C當中是不存在。Objective-C當中最相近的東西就是,一個返回對象類型的函數(shù),可以返回nil.nil表示不存在一個有效的對象。但是,這個只適用于對象,對于結(jié)構(gòu)體,基本的C類型,枚舉,就不行了。對于這些類型,Objective-C的方法通常返回一個特殊值(比如NSNotFound)表示值的缺失。這種方法假設方法的調(diào)用者知道要返回一個特殊值來進行判斷。Swift的可選類型可以讓你表示任何類型值的缺失,再也不用那些特殊的常量了。這里有個例子。Swift的String類型有個方法toInt,它可以將字符串轉(zhuǎn)成整型。但是,不是每個字符串都可以轉(zhuǎn)換成整型的。比方說,”123“可以轉(zhuǎn)換成數(shù)字123,但是"hello,world"就沒有明顯的整型可以轉(zhuǎn)成的了。下面的例子使用toInt方法,將字符串轉(zhuǎn)成整型:由于toInt方法可能會失敗,它返回一個可選類型的Int,而不是單純的Int。一個可選類型的Int寫作Int?,而不是Int.問號表示當前變量是可選類型的,意味著變量可能包含整型值,或者根本什么都沒有(但不能包含其他的類型,比如Bool,String.記住,要么Int型,要么什么都沒有)。
你可以使用if語言來判斷一個可選類型的變量是否包含值。如果它確實包含值,那么就是true.如果它根本沒有值,那就是false.一旦你確定該可選類型的變量缺失有值的話,你就可以通過在變量名稱后面加上嘆號(!)的方式訪問潛在的值。嘆號很有效的說明了:“我知道這個可選類型確實有值,放心的用去吧”。這個就是所謂的可選類型的強制拆箱。注意:嘗試在一個沒有值的可選類型上使用!,會引發(fā)運行時錯誤。在使用!強制拆箱一個可選類型之前,一定要確保它有一個非nil值。你可以通過綁定一個可選類型到一個常量或者變量中,不僅可以檢測可選類型是否含有值,還可以在之后通過這個臨時變量或者常量訪問他的值。通過一個操作,就可以在If
和while當中使用綁定來檢查可選當中的值,同時也可以將可選的值放到變量或者常量當中。if和while語句在流程控制當中有詳細的描述。像下面這樣,在if語句當中實現(xiàn)可選類型的綁定:你可以使用綁定代替強制拆箱,重寫上面的possibleNumber例子:上面的代碼意思就是:如果possibleNumber.toInt返回的可選Int變量包含值的話,就將可選變量的值賦給新的常量actualNumber.如果上面的轉(zhuǎn)換是成功的話,就可以在if語句當中使用actualNumber了。它已經(jīng)用可選變量的值初始化過了,因此就沒必要在使用!了。這個例子只是使用actualNumber來打印一下轉(zhuǎn)換結(jié)果。綁定一個可選類型,既可以使用常量,也可以使用變量。如果你想在if語句當中操作actualNumber,你也可以寫成ifvaractualNumber,那么可選類型就是作為變量了,而不是常量了。你可以通過給一個可選類型的變量賦予nil,來讓他處于沒有值的狀態(tài):注意:nil
不能用于非可選類型的常量和變量。如果要在你的代碼中處理變量或者常量缺失值的情況,一定要將他們聲明為恰當?shù)目蛇x類型。如果你在定義可選類型的變量或者常量的時候,沒有指定默認值的話,那么系統(tǒng)或自動賦給它nil的。注意:Swift的nil和Objective-C中的nil是不一樣的。在Objective-C中,nil是指向一個不存在對象的指針,而在Swift當中,nil不是一個指針,它代表某中類型值的缺失。任意類型的可選類型都可以賦予nil,而不只是對象類型的。
就像上面描述的一樣,可選類型表明一個變量或者常量允許沒有值。可以使用if語句檢查一個可選類型是否有值,如果有值的話,就可以使用綁定將可選類型進行拆箱。有時候,從你的代碼結(jié)構(gòu)當中可以清楚的知道一個可選類型一旦服了賦了值,之后總是有值的。在這種情況下,就沒有必要每次訪問可選類型,都經(jīng)過檢查和拆箱了,因為我們明確的知道它一直都是有值的。我們就上面這種情況的可選類型定義為隱式拆箱的可選類型。在你想將將它變成可選的類型后面,加上嘆號(!)而不是問號(?),就可以將它定義為隱式拆箱的可選類型了。當一個可選類型第一次定義之后,可以很明確的知道之后它一定有值的話,隱式拆箱是非常有用的。在Swift中,隱式拆箱的主要作用就是在類的初始化過程中,參考“無主引用和隱式拆箱可選類型屬性”隱式拆箱的可選類型其實就是一個普通的可選類型,只不過可以像普通的變量一樣使用,不用每次訪問的時候都拆箱了。下面的例子展示了一個可選類型的String和一個隱式拆箱的可選類型的String之間的區(qū)別:你可以把一個隱式拆箱的可選類型想象成無論什么時候使用它,你都已經(jīng)授權(quán)給他讓他自動拆箱了。在聲明可選類型的時候,在后面加上嘆號(!),這樣你就不用每次訪問值的時候,都在后面加上嘆號(!)了。注意:如果你在訪問一個隱式拆箱的時候,它沒有值,就會觸發(fā)一個運行時錯誤。結(jié)果和在一個普通的可選類型后面加上嘆號時的效果是一樣的。你可以把隱式拆箱看成一個普通的可選類型來檢
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣播電視節(jié)目制作中的編劇策略考核試卷
- 信托公司財務風險分析與控制考核試卷
- 疫情網(wǎng)課班會課件小學生
- 塑料薄膜在戶外運動裝備的應用考核試卷
- 智能清潔電器的遠程監(jiān)控技術考核試卷
- 機器人傳感器數(shù)據(jù)融合與應用考核試卷
- 蘇州恒溫配送合同范本
- 土建及市政合同范本
- 拍攝視頻制作合同范本
- 毛坯公寓酒店合同范本
- 質(zhì)量管理軟件操作手冊
- 翰威特任職資格撰寫培訓材料
- 大家排好隊說課
- 鐵氧體永磁材料
- 湘教版初中數(shù)學教材目錄
- 金蝶云星辰初級考試題庫
- GM/T 0107-2021智能IC卡密鑰管理系統(tǒng)基本技術要求
- 部編版七年級下冊語文第一單元課件
- 2023年山東省青島市統(tǒng)招專升本管理學自考真題(含答案)
- 文化產(chǎn)業(yè)政策與法規(guī)課件
- 人教版八年級下冊生物全冊教案完整版教學設計含教學反思
評論
0/150
提交評論