Swift 协议中的默认参数和忽略参数 method/function

Swift default argument and ignore argument in protocol method/function

如何设置协议的功能,使其可以接收可选参数甚至忽略它?

我有这个协议:

protocol Game {
    func modeName(forRound: Int) -> ModeName
}

有了这2个特别 类 :

//Goal: Default forRound should be 0 if none provided
class OnlineGame : Game {
    func modeName(forRound: Int = 0) -> ModeName {
        //Some code
    }
}

//Goal: I don't care about the forRound value here
class OfflineGame : Game {
    func modeName(_ forRound: Int) -> ModeName {
        //Some code
    }
}

首先,在 protocol 中,您声明了 "method" 和 the first parameter of "method" has no external name by default。所以这是非常 正常 案例代码:

class SomeGame: Game {
    func modeName(forRound: Int) -> ModeName {
        // ...
    }
}

let game: Game = SomeGame()
let modeName = game.modeName(1) // not `game.modeName(forRound: 1)`

在您的 OnlineGame 案例中,if the parameter has default value, it has external name automatically 即使它是方法的第一个参数。您可以使用 _ 作为显式 external name:

覆盖该行为
class OnlineGame : Game {
    func modeName(_ forRound: Int = 0) -> ModeName {
        //Some code
    }
}

在您的 OfflineGame 情况下,您可以忽略 _ 作为 内部名称:

的参数
class OfflineGame : Game {
    func modeName(_: Int) -> ModeName {
        //Some code
    }
}