Ios 协议方法/函数中的Swift默认参数和ignore参数

Ios 协议方法/函数中的Swift默认参数和ignore参数,ios,swift,arguments,protocols,Ios,Swift,Arguments,Protocols,如何设置协议的函数,以便它可以接收可选参数,甚至可以忽略它 我有这个协议: protocol Game { func modeName(forRound: Int) -> ModeName } 在这两个特殊类中: //Goal: Default forRound should be 0 if none provided class OnlineGame : Game { func modeName(forRound: Int = 0) -> ModeName {

如何设置协议的函数,以便它可以接收可选参数,甚至可以忽略它

我有这个协议:

protocol Game {
    func modeName(forRound: Int) -> ModeName
}
在这两个特殊类中:

//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
    }
}

首先,在
协议中
,您要声明“方法”,并且。下面是非常正常的案例代码:

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

let game: Game = SomeGame()
let modeName = game.modeName(1) // not `game.modeName(forRound: 1)`
在您的
OnlineGame
案例中,即使它是方法的第一个参数。您可以使用显式的外部名称来覆盖该行为:

class OnlineGame : Game {
    func modeName(_ forRound: Int = 0) -> ModeName {
        //Some code
    }
}
class OfflineGame : Game {
    func modeName(_: Int) -> ModeName {
        //Some code
    }
}
在您的
离线游戏
案例中,您可以将
作为内部名称忽略参数

class OnlineGame : Game {
    func modeName(_ forRound: Int = 0) -> ModeName {
        //Some code
    }
}
class OfflineGame : Game {
    func modeName(_: Int) -> ModeName {
        //Some code
    }
}

谢谢你的回答。我仍然对
OnlineGame
有问题,如果我按照您在OnlineGame类中编写的那样设置函数,我无法在没有参数的情况下调用
game.modeName()
func modeName(\uround:Int=0)->modeName
Nice。这对我有用。不久前我第一次尝试时,显然犯了一些错误。谢谢@BabyAzerty如何声明
游戏
变量?如果这是
let-game:game=OnlineGame()
,你不能直接调用它的
.modeName()
,因为编译器不知道它是
OnlineGame
类的实例。好的,谢谢:-)我想我会将函数修改为
func-modeName(forRound:Int?
,如果为nil,则指定一个默认值。