Swift4.2: почему func gameDidEnd (_ :) не нужно использовать игровой параметр, но все равно объявить в функции? - PullRequest
0 голосов
/ 24 августа 2018

Согласно документации на 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?Я действительно не понимаю эту часть ....

1 Ответ

0 голосов
/ 24 августа 2018

Простой ответ - да, это осознанный выбор со стороны Apple.Параметр является обязательной частью объявления метода протокола:

protocol DiceGameDelegate: AnyObject {
    func gameDidStart(_ game: DiceGame)
    func game(_ game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int)
    func gameDidEnd(_ game: DiceGame)
}

И поэтому для соответствия протоколу он должен включать параметр независимо от того, используете ли вы его или нет.

...