swift學習記錄(Optional)

2021-06-28 19:17:53 字數 1748 閱讀 2684

對swift語法的陌生主要**於兩個地方,乙個是區別於其他語言的語法形式,比如c++中的int i 與swift中的var i:int;另外乙個是語法的功能,swift中的語法功能千奇百怪。從這篇文章開始,主要通過閱讀與搜尋the swift programing language 來學習,記錄學習過程中的陌生點。 (

dictionary

["threename"

]) 時發現輸出的結果卻是

optional("i am three value"),這讓我很差異。完整**如下:

//6.資料字典建立與呼叫

vardictionary = ["onename":"i am one value","twoname":"i am two value"];

var gettowvalue = dictionary["twoname"];

//與lua非常相似的字典語法,可以直接插入

dictionary

["threename"] = "i am three value"

println

(dictionary

["threename"])

如果這是lua語言,這輸出的無疑是 「

i am three value」 ,何來的 

下面具體來看看optional衍生出來了哪些麻煩東西。

1、如果你需要宣告乙個int的可選值,你需要 var a:int? = 5,你需要在型別後面加乙個「?」,官方認為這很優雅,但是用老羅的話說,傷疤做的再漂亮,它依然是一道傷疤。

3、再告訴你乙個不幸的訊息,在2中的println(a!)很可能會發生執行時奔潰,因為如果a是空值,是不允許拆包的。所以你需要這樣:

var a:int? = 5

if (a != nil)

4、同時,你會發現a需要不停地拆包,這時另乙個傷疤來了:可選繫結(optional binding),不管你怎麼看,下面這幾行是不符合其基本語法的,但是你不要懷疑,它叫可選繫結。在if判斷裡這麼一複製,a居然毫無徵兆的拆包成ba了!

if let ba = a

5、你以為只要自己使用可選值的時候,多注意一下就行?真相是可選值會像幽靈一樣悄悄靠近你。

var

dictionary = ["onename":"i am one value","twoname":"i am two value"]

println

(dictionary

["onename"])

var s1:string = "123"

var sa = s1.toint()

println(sa)

說了這麼多壞東西,下面說點好的,為了符合點正常邏輯,swift還提供了隱式解析可選:

var ya:int! = 9

println(ya)

println(

ya+ 1)

ya = nil

if (ya != nil)

ya = 15

if (ya != nil)

嗯,好的,我覺得這下符合邏輯多了。

swift學習記錄(列舉)

列舉定義了乙個通用型別的一組相關值,使我們可以在 中以一種安全的方式來使用這些值。基本語法 使用 enum 關鍵字定義列舉 enum 列舉名 enum compasspoint 成員值乙個列舉中定義的值,是列舉的成員值 成員 case 關鍵字表示乙個新的成員值將被定義。列舉的成員值不會被預設賦予乙個...

swift學習記錄(擴充套件)

擴充套件就是向乙個已有的類 結構體 列舉型別或者協議型別新增新功能。基本 語法 使用關鍵字extension來宣告乙個擴充套件 extension 型別名 擴充套件可以 1 新增計算性屬性 和 靜態計算性屬性 extension double var m double var cm double v...

swift 學習記錄(協議)

協議是為方法 屬性等定義一套規範,沒有具體的實現。類,結構體或列舉型別都可以遵循協議,並提供具體實現來完成協議定義的方法和功能。基本語法 protocol 協議名稱 型別使用冒號 來遵循協議,遵循多個協議時,用逗號 隔開 protocol 型別名 協議名1,協議名2,協議名3 對屬性的規定 協議中的...