import uikit
import foundation
/面向協議程式設計
*****/
/// pop就是通過協議擴充套件,協議繼承和協議組合的方式來設計需要編寫的**
/// 協議擴充套件 protocol extensions
/// 協議繼承
/// 協議組合
/// swift中,值型別優先於類,值型別可以從協議繼承,設定支援從多個協議繼承,因此,使用pop讓值型別成為了swift中的一等公民
/// protocol extensions
/// 提供協議方法的預設實現和協議屬性的預設值,從而使它們成為可選;符合協議的型別可以提供自己的實現,也可以使用預設的實現。
/// 新增協議中未宣告的附加方法實現,並且實現協議的任何型別都可以使用到這些附加方法。這樣就可以給遵循協議的型別新增特定的方法。
protocol entity
static func uid() -> string
}extension entity
}struct order: entity
let order = order(name: 「my order」)
print(order.uid)
/// protocol inheritance
/// 協議可以從其他協議繼承,然後在它繼承的需求之上新增功能,因此可以提供更細粒度和更靈活的設計。
protocol persistable: entity
struct inmemoryentity: entity
struct persistableentity: persistable
init?(by uid: string)
var name: string
/// protocol composition
/// 類、結構體和列舉可以符合多個協議,它們可以採用多個協議的預設實現。這在概念上類似於多繼承。這種組合的方式不僅比將所有需要的功能壓縮到乙個基類中更靈活,而且也適用於值型別
struct myentity: entity, equatable, customstringconvertible
/// equatable
/// lhs:left hand side
/// rhs:right hand side
public static func == (lhs: myentity, rhs: myentity) -> bool
var name: string
let entity1 = myentity(name: 「42」)
print(entity1)
let entity2 = myentity(name: 「42」)
assert(entity1 == entity2, 「entities shall be equal」)
protocol theprotocol
extension theprotocol
/// extention新增協議中未宣告的附加方法實現
/// method2 is not defined in protocol
func method2()
}struct struct1: theprotocol
/// 動態型別實現 method2
func method2()
}/// 推斷型別為 動態型別 執行動態型別實現方法
let s1 = struct1()
s1.method1()
s1.method2()
print("\n-----------------\n")
/// 推斷型別為 協議型別
let s2: theprotocol = struct1()
/// method1 在協議中有定義 呼叫struct1的動態型別實現方法
s2.method1()
/// method2 在協議中無定義 在extention的實現 呼叫theprotocol的extention預設實現方法
s2.method2()
print("\n-----------------\n")
/*called method1 from struct1
called method2 from struct1
called method1 from struct1
called method2 from theprotocol
/*protocol 基礎語法
屬性要求 :
:指定讀寫屬性
static/class:指定型別屬性
方法要求:
static/class:指定類方法
mutating:要求實現可變方法(針對值型別的例項方法,可以在該方法中修改它所屬的例項以及例項的任意屬性的值)
構造器要求:
在遵循協議的類中,必須使用required關鍵字修飾,保證其子類也必須提供該構造器的實現。(除非有final修飾的類,可以不用required,因為不會再有子類)
protocol 作為型別
作為型別:代表遵循了該協議的某個例項(實際上就是某個例項遵循了協議)
協議型別的集合:let a: [someprotocol],遵守某個協議的例項的集合
delegate 委託設計模式:定義協議來封裝那些需要被委託的功能
protocol 間的關係
協議的繼承:協議可繼承
協議的合成:使用&關鍵字,同時遵循多個協議
協議的一致性:使用is、as?、as!進行一致性檢查
類專屬協議:協議繼承時使用class關鍵字,限制該協議職能被類繼承
optional & @objc 關鍵字
可選協議:使用optional修飾屬性、函式、協議本身,同時所有option必須被@objc修飾,協議本身也必須使用@objc,只能被objective-c的類或者@objc的類使用
extension 關鍵字
(對例項使用)令已有型別遵循某個協議
(對協議使用)可遵循其他協議,增加協議一致性
(對協議使用)提供預設實現
(搭配where對協議使用)增加限制條件
*/
Swift中值型別賦值操作
值型別賦值給var let或者給函式傳參,是直接將所有內容拷貝乙份,類似於對檔案進行copy paste操作,產生了全新的檔案副本。屬於深拷貝 deep copy 在swift標準庫中,為了提公升效能,string array dictionary set採取了copy on write的技術。比如...
Swift 面向協議程式設計入門
本文講的是swift 面向協議程式設計入門,class humanclass var classyhuman humanclass name bob classyhuman.name bob var newclassyhuman classyhuman created a copied object...
Swift 面向協議程式設計之協議擴充套件
協議的命名遵循swift的標準庫,即協議名以 type able ible 結尾。例如 sequencetype,generatortype,customstringcoveeertible,type定義行為,able定義元素怎樣做事。swift 能擴充套件協議 協議可以新增方法和屬性 協議擴充套件...