Swift 關於Protocol擴充套件的靜態特性

2021-08-03 02:11:13 字數 1472 閱讀 8885

實驗樣本**

//宣告乙個協議

protocol sharedstring

//擴充套件協議,實現預設實現

//注意方法methodwithoutoverride 中呼叫了 methodforoverride 方法,這裡有乙個上寫文切換的問題

extension sharedstring

func methodwithoutoverride() -> void

}//在string類的擴充套件中遵守並實現協議

extension string:sharedstring

}//建立字串並切換上下文到sharedstring協議

letshared:sharedstring = "hello"

shared.methodforoverride()

shared.methodwithoutoverride()

情況編號

協議中宣告方法

協議擴充套件中預設實現

遵循協議類中重寫

實驗屬性遵循協議(轉換上下文)

執行方法結果方法

1yes

noyes

no遵循協議類中重寫的方法

2yes

yesyes

yes遵循協議類中重寫的方法

3yes

noyes

yes遵循協議類中重寫的方法4no

noyes

no遵循協議類中重寫的方法

5yes

yesyes

no遵循協議類中重寫的方法6no

yesno

yes協議擴充套件中的預設實現7no

yesno

no協議擴充套件中的預設實現

8yes

yesno

yes協議擴充套件中的預設實現

9yes

yesno

no協議擴充套件中的預設實現

10no

yesyes

yes協議擴充套件中的預設實現

11no

yesyes

no方法1、2都是協議擴充套件中的方法。方法1,在遵循類中被重寫,呼叫方法1,是遵循協議類中重寫的方法。方法2沒有被重寫,但是在協議中方法2呼叫了方法1,這時,方法2呼叫時方法1依舊是協議擴充套件中的預設實現

12no

noyes

yeserror

13no

nono

yeserror

14no

nono

noerror

15yes

nono

noerror

16yes

nono

yeseroor

重寫協議擴充套件中定義的方法,協議擴充套件的靜態特性保留了方法的原版盒被重寫版本,你可以通過切換上下文獲得不同的版本,同時對於沒有重寫的方法,可以保證其不變性。

我們可以遵循乙個原則,把那些希望被重寫的方法定義在協議中,那些不希望被複寫的方法的定義和實現放在協議擴充套件中。

swift 中協議的使用 protocol

協議可被類 結構體 或列舉型別採納以提供所需功能的具體實現。滿足了協議中需求的任意型別都叫做遵循了該協議。實現目標,以官方文件為背景,修改了一下,使其更簡單,建立乙個遊戲玩家和遊戲狀態跟蹤的類,將遊戲和開始和結束做為遊戲狀態。protocol gameprotocol func gamestart ...

Swift中使用protocol的注意事項

oc中protocol是用weak和assign修飾的弱引用.swift中protocol功能被增強了,如果使用以下 就會變成強引用.protocol testdelegate class test nsobject testdelegate static func test deinit clas...

protocol簡單使用

可以宣告一大堆方法 不能生命成員變數 只要某個類遵循了這個協議,就相當於擁有了這個協議中的所有方法宣告 只要父類遵循了某個協議,就相當於子類也遵守了 協議的檔案只有乙個 protocal myprotocal end乙個類想要遵守乙個協議 inte ce person object 乙個類遵守乙個協...