swift繼承 多型 擴充套件 協議

2021-07-25 11:16:31 字數 1626 閱讀 5457

swift的繼承是單一繼承。

class classname : superclass{}
方法多型

class baseclass

}class superclass

}

屬性多型

通過繼承屬性 你可以改變 get和set

class baseclass}}

class superclass

}}

禁止多型

//將整個類標識為禁止繼承

final class classname{}

//將類的部分成員變數或者函式禁止繼承

class classname

*類似於c# partial在不新增新的類的情況下來擴充套件原有的類*

extension classname{}

但是擴充套件有功能限制:

新增計算型屬性和計算型靜態屬性

extension int

}

定義例項方法和型別方法

extension int 

}

提供新的構造器

stuct mult

extension mult

}

定義下標

extension int

return (self / no1) % 10

}}

巢狀型別

extension int

}

可變例項方法

extension double

}

協議只定義變數名和方法名而不需要實現.

protocal protacolname

var property2 : datatype

func methodname(parameters) -> datatype

}協議中所有的變數和方法必須在繼承的類中實現

protocol test

func purchase(price : int) -> string

}class shopper : test

}可選協議

定義可選變數和方法

@objc protocol protocolname

class classname : protocalname

不同於類的繼承是單一的,乙個協議可以繼承多個介面

protocal first{}

protocal seconde{}

protocal third : first,second{}

protocal cat{}

extension cat{}

//協議選擇性擴充套件

extension cat where self:black{}

swift 協議和擴充套件

在擴充套件裡新增協議遵循 你可以擴充套件乙個已經穿在的型別來採納和遵循乙個新的協議,舊算時你無法訪問現有的型別的源 也行,擴充套件可以新增新的屬性 方法 和下標到已經存在的型別。並且因此允許你新增協議需要的任何結果 from import uikit protocol textrepresentab...

Swift 優雅的協議擴充套件

先看呼叫效果 123456 yy str.md5forlower32bate 123456 yy str.md5forlower32bate 類似 view.snp.為什麼要這麼做呢?好處在哪呢?降低耦合度 傳統的寫法,直接在類別中新增乙個方法或屬性例如 extension string d d x...

Swift 面向協議程式設計之協議擴充套件

協議的命名遵循swift的標準庫,即協議名以 type able ible 結尾。例如 sequencetype,generatortype,customstringcoveeertible,type定義行為,able定義元素怎樣做事。swift 能擴充套件協議 協議可以新增方法和屬性 協議擴充套件...