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
}
}
如何设置协议的功能,使其可以接收可选参数甚至忽略它?
我有这个协议:
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
}
}