swift 中協議的使用 protocol

2021-10-06 21:31:21 字數 1749 閱讀 7647

協議可被類、結構體、或列舉型別採納以提供所需功能的具體實現。滿足了協議中需求的任意型別都叫做遵循了該協議。

實現目標,以官方文件為背景,修改了一下,使其更簡單,建立乙個遊戲玩家和遊戲狀態跟蹤的類,將遊戲和開始和結束做為遊戲狀態。

protocol

gameprotocol

func

gamestart()

;}protocol

gamedelegateprotocol

gameprotocol協議要求,必須有乙個可以get玩家姓名的屬生,和乙個開始遊戲的方法。

gamedelegateprotocol要求,返回遊戲開始和遊戲結果的通知,並且需要告知跟蹤的物件是哪個game:gameprotocol

遊戲玩家類,gameplayer遵守gameprotocol協議,定義了相應的屬性及方法,並且通過擴充套件int 取得乙個不大於sides的隨機數,做為搖骰子遊戲的結果,在遊戲開始和結束時,分別判斷是否指定了委託對應,並呼叫委託方法。

import

foundation

extension

int}

class

dice

init

(sides:

int=6)

}//遊戲玩家類

class

gameplayer

:gameprotocol

func

gamestart()

}

***的類gametracker遵守gamedelegateprotocol協議定義的兩個委拖方法,並且通過引數可以知道當前是哪個玩家的遊戲狀態。

//遊戲狀態跟蹤類

class

gametracker

:gamedelegateprotocol

func

gamedidend

(game:

gameprotocol

)}

gamecenter類中可以新增多個玩家,分別開始遊戲,並通過日誌資訊可以看到執行的順序。

//將所有玩家關聯起來

class

gamecenter

func

rungame()

for n in names

}}

let g =

gamecenter()

g.rungame()

g.addplayer

(name:

"xuan")g.

addplayer

(name:

"wen")g.

addplayer

(name:

"chao")g.

rungame

()

程式執行結果如下:

目前還沒有玩家...

遊戲玩家:xuan-gamedidstart

遊戲玩家:xuan-遊戲執行結果:2

遊戲玩家:xuan-gamedidend

遊戲玩家:wen-gamedidstart

遊戲玩家:wen-遊戲執行結果:1

遊戲玩家:wen-gamedidend

遊戲玩家:chao-gamedidstart

遊戲玩家:chao-遊戲執行結果:6

遊戲玩家:chao-gamedidend

Swift中的協議

equatable協議用於相等的比較,遵守這個協議後必須對 運算子進行過載。struct record equatable func left record,right record bool let recorda record wins 10,losses 5 let recordb recor...

Swift協議中類繼承協議的mutating問題

之前實際開發的時候遇到的乙個小問題,網上也沒有找到相關說明。本來當時弄明白了想著記下來的,但是比較忙就耽擱了,趁今天休息記錄一下。首先,我們看一下下面這個兩數之和的協議 protocol test customstringconvertible varnum2 intfunc getsum intf...

Swift中協議的基礎知識

在swift中,協議用於統一方法和屬性,或者說協議是特定的方法和屬性的集合,但是它本身並沒有實現,它只有宣告,具體的實現是由其它遵守該協議的主體來執行的。類 結構體和列舉在宣告的時候,都可以遵守乙個或者多個協議,並實現協議所要求的屬性或者方法。協議的格式一般為 定義協議 protocol 協議名 遵...