原创 Swift學習:泛型,關聯類型,類型約束,協議類型及錯誤解決,some

泛型(Generics) 泛型可以將類型參數化,提高代碼複用率,減少代碼量 func swapValues<T>(_ a: inout T, _ b: inout T) { (a, b) = (b, a) } var i1 =

原创 Swift(學習):訪問控制

訪問控制(Access Control) 在訪問權限控制這塊,Swift提供了5個不同的訪問級別(以下是從高到低排列, 實體指被訪問級別修飾的內容) open:允許在定義實體的模塊(工程中所有創建的swift文件)、其他模塊(三方庫)中訪

原创 Swift學習(十五):可選鏈

可選鏈(Optopnal Chaining)  可選項的返回值也是可選型 如果可選項爲nil,調用方法、下標、屬性失敗,結果爲nil 如果可選項不爲nil,調用方法、下標、屬性成功,結果會被包裝成可選項   如果結果本來就是可選項,不會

原创 Swift學習: 可選項本質

可選項的本質 可選項的本質是enum類型  這是底層可選項的代碼,可以看出本質是enum var age: Int? = 10 等價於以下四種: var age0: Optional<Int> = Optional<Int>.som

原创 Swift(學習):擴展(Extension)

擴展(Extension) Swift中的擴展,有點類似於OC中的分類(Category)  擴展可以爲枚舉、結構體、類、協議添加新功能 可以添加方法、計算屬性、下標、(便捷)初始化器、嵌套類型、協議等等 擴展不能辦到的事情:要注意擴展不

原创 Swift:高級運算符

溢出運算符 Swift的算數運算符出現溢出時會拋出運行時錯誤 Swift有溢出運算符(&+、&-、&*),用來支持溢出運算 var umin = UInt8.min //0 var umax = UInt8.max //255 var

原创 Swift(學習):錯誤處理

錯誤類型 開發過程常見的錯誤: 語法錯誤(編譯報錯) 邏輯錯誤  運行時錯誤(可能會導致閃退,一般也叫做異常 ...... 自定義錯誤 Swift中可以通過Error協議自定義運行時的錯誤信息 enum SomeError : Erro

原创 Swift學習(十六):協議

協議(Protocal) 協議可以用來定義方法、屬性、下標的聲明,協議可以被枚舉、結構體、類遵守(多個協議之間用逗號隔開) 協議中定義方法時不能有默認參數值  默認情況下,協議中定義的內容必須全部都實現 也有辦法可以辦到只實現部分內容

原创 Swift學習(十四):初始化

初始化器 類、結構體、枚舉都可以定義初始化器 類有2種初始化器:指定初始化器(designated initializer)、便捷初始化器(convenience initializer) 每個類至少有一個指定初始化器,指定初始化器是類的

原创 Swift學習(十一):下標

下標(subscript) 使用subscript可以給任意類型(枚舉、結構體、類)增加下標功能,有些地方也翻譯爲:下標腳本 subscript的語法類似於實例方法、計算屬性,本質就是方法(函數),(語法書寫方式[ ])   p[0]

原创 Swift 學習(十三):多態

多態:父類指針指向子類對象 多態的實現原理: OC: Runtime C++: 虛表(虛函數表) Swift:類似於虛表 多態代碼: class Animal { func speak() { print("An

原创 Swift學習(九):屬性

屬性分類 Swift中跟實例相關的屬性可以分爲2大類: 存儲屬性(Stored Property)  類似於成員變量這個概念  存儲在實例的內存中  結構體、類可以定義存儲屬性  枚舉不可以定義存儲屬性 計算屬性(Computed Pro

原创 Swift學習(十):方法

方法(Method) 枚舉、結構體、類都可以定義實例方法、類型方法 實例方法(Instance Method):通過實例對象調用,相當於OC中的對象方法 類型方法(Type Method):通過類型調用,用static或者class關鍵字

原创 Swift學習(十二):繼承

繼承(Inheritance) 值類型(枚舉、結構體)不支持繼承,只有類支持繼承  沒有父類的類,稱爲:基類 Swift並沒有像OC、Java那樣的規定:任何類最終都要繼承自某個基類  子類可以重寫父類的下標、方法、屬性,重寫必須加上ov

原创 Swift(學習):閉包

閉包表達式(Closure Expression) 可以通過func定義一個函數,也可以通過閉包表達式定義一個函數 func函數 閉包定義函數 閉包表達式調用可以直接省略參數名 閉包定義函數也可以寫爲: 閉包表達式的結構 閉包表達