根据swift.org上的文档,原始源代码如下:
https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
class DiceGameTracker: DiceGameDelegate {
var numberOfTurns = 0
func gameDidStart(_ game: DiceGame) {
numberOfTurns = 0
if game is SnakesAndLadders {
print("Started a new game of Snakes and Ladders")
}
print("The game is using a \(game.dice.sides)-sided dice")
}
func game(_ game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int) {
numberOfTurns += 1
print("Rolled a \(diceRoll)")
}
func gameDidEnd(_ game: DiceGame) {
print("The game lasted for \(numberOfTurns) turns")
}
}
我知道 func gameDidStart 使用类型 DiceGame 游戏参数来访问 .dice.sides,并检查引用对象。
但是 func gameDidEnd(_ game: DiceGame)
和 func game(_ game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int)
这两个函数没有使用游戏参数,为什么还要声明呢?它是Apple的编码风格吗?我真的不明白这部分....
最佳答案
简单的回答是肯定的,这是 Apple 深思熟虑的选择。该参数是协议(protocol)方法声明的必需部分:
protocol DiceGameDelegate: AnyObject {
func gameDidStart(_ game: DiceGame)
func game(_ game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int)
func gameDidEnd(_ game: DiceGame)
}
因此,为了符合协议(protocol),无论您是否使用它,它都必须包含该参数。
关于ios - Swift4.2 : Why func gameDidEnd(_:) no need to use game parameter but still declare in the function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009021/