Kal*_*zem 5 arguments protocols ios swift
如何设置协议的功能,以便它可以接收可选参数甚至忽略它?
我有这个协议:
protocol Game {
func modeName(forRound: Int) -> ModeName
}
Run Code Online (Sandbox Code Playgroud)
有了这两个特殊课程:
//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
}
}
Run Code Online (Sandbox Code Playgroud)
首先,在 中protocol,你声明的是“method”,并且“method”的第一个参数默认没有外部名称。所以这是非常正常的情况代码:
class SomeGame: Game {
func modeName(forRound: Int) -> ModeName {
// ...
}
}
let game: Game = SomeGame()
let modeName = game.modeName(1) // not `game.modeName(forRound: 1)`
Run Code Online (Sandbox Code Playgroud)
在您的OnlineGame情况下,如果参数具有默认值,即使它是方法的第一个参数,它也会自动具有外部名称。_您可以使用显式外部名称覆盖该行为:
class OnlineGame : Game {
func modeName(_ forRound: Int = 0) -> ModeName {
//Some code
}
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您可以忽略具有内部名称的OfflineGame参数:_
class OfflineGame : Game {
func modeName(_: Int) -> ModeName {
//Some code
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3962 次 |
| 最近记录: |