iOS筆記 Swift中的Optional型別

2022-03-02 10:11:29 字數 1542 閱讀 1749

在objective-c中並沒有optional型別, 只有nil,並且nil只能用於表示物件型別無值,

並不能用於基礎型別(int, float),列舉和結構體,基礎型別需要返回類似nsnotfound的特殊值來表示無值,

所以在swift中定義了optinal型別來表示各種型別的無值狀態,並規定了nil不能用於非可選的常量和變數,只能用於optinal型別

var serverresponsecode: int? = nil

// serverresponsecode 現在不包含值

serverresponsecode = 404

// serverresponsecode 包含乙個可選的 int 值 404

int? 表示serverresponsecode可以是有值的也可以是無值的

var surveyanswer: string?

//surveyanswer 被自動設定為 nil

使用 if 語句和 nil 來判斷乙個optional型別是否有值

var convertednumber: int? 

if convertednumber != nil

使用optional binding來判斷optional型別是否有值,並且如果有值就把值賦給乙個常量或者臨時變數。

optional binding可以用在 if 和 while 語句中:

if let constantname = someoptional 

//如果someoptional這個optional型別有值,建立乙個叫做constantname的常量並將someoptional包含的值賦給它。

//並且因為constantname已經被optional型別包含的值初始化過,所以不需要再使用 ! 字尾來獲取它的值。

當確定可選型別確實包含值之後,可以在可選的名字後面加乙個感嘆號( ! )來獲取值;

當option == nil時,使用 ! 來獲取會導致執行時錯誤。所以使用 ! 來強制解析值之前,一定要確定option型別不是nil的

有時候在編寫程式中,乙個optional型別第一次被賦值後,可以確定它以後總會有值,

在這種情況下,使用它時每次都還需要判斷和解包optional型別是非常低效的,因為可以確定它總會有值,

所以swift中定義了乙個隱式解析可選型別,它在使用時可以自動解析;

把( string? )改成感嘆號( string! )就可以宣告乙個隱式解析可選型別。

let possiblestring: string? = "an optional string."

let forcedstring: string = possiblestring! // 需要驚嘆號來獲取值

let implicitstring: string = assumedstring // 不需要感嘆號

但是需要注意:

可以理解為隱式解析可選型別用於宣告初始化時可能為nil,但之後會立刻被賦值,並且不會再變成nil的optional型別物件

iOS協議的學習筆記swift版

協議,協議就是類成員函式的引用,用於類之間傳值.形象的說就是有需求的類沒有可實現需求的成員函式,委託有實現需求的成員函式的類 實現需求,可以簡化 使 便於維護,使用的過程就是引用,引用只看物件,所以需要對協議進行宣告 格式protocol protocol 自定義型別,引用型別可以建立引用 類名 繼...

iOS 學習筆記, Swift名字空間

在swift中,名字空間是用class extension 巢狀來實現的,以下用乙個簡單樣例來進行展示 main.swift swiftnamespace created by yao yu on 14 8 1.swift名字空間使用例項 import foundation 定義頂層名字空間 cla...

Swift在IOS開發中的地位

對於蘋果開發者來說,如今已經進入了 swift時代 雖然程式語言objective c備受喜愛,不過它作為蘋果主流程式語言的日子已經所剩無幾。隨著wwdc開發者大會的落幕,swift即將取而代之,成為蘋果新ios8 os x yosemite的新寵。美國時間6月2日舉行的蘋果wwdc大會上,swif...