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