在objective-c中並沒有optional型別, 只有nil,並且nil只能用於表示物件型別無值,
並不能用於基礎型別(int, float),列舉和結構體,基礎型別需要返回類似nsnotfound的特殊值來表示無值,
所以在swift中定義了optinal型別來表示各種型別的無值狀態,並規定了nil不能用於非可選的常量和變數,只能用於optinal型別
使用 if 語句和 nil 來判斷乙個optional型別是否有值var serverresponsecode: int? = nil
// serverresponsecode 現在不包含值
serverresponsecode = 404
// serverresponsecode 包含乙個可選的 int 值 404
int? 表示serverresponsecode可以是有值的也可以是無值的
var surveyanswer: string?
//surveyanswer 被自動設定為 nil
使用optional binding來判斷optional型別是否有值,並且如果有值就把值賦給乙個常量或者臨時變數。var convertednumber: int?
if convertednumber != nil
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...