我想测试我的“掷骰子”功能,然后生成当前游戏的运行得分。
签名是:
VBox
因为我想换出随机函数,以便可以对其进行测试,所以可以通过以下方式调用随机函数:
func rollDice(randFunc: ((ClosedRange<Int>) -> Int)? = Int.random) -> (dice1: Int, dice2: Int, losePointsTurn: Bool, losePointsGame: Bool)
我在测试目标中为非随机函数创建了扩展
dice1 = randFunc!(0...5)
dice2 = randFunc!(0...5)
但是当我尝试在测试中使用它时:
extension ClosedRange {
func noRand(_ : Bool) -> Int {
return 0
}
}
我有错误:
无法将'(ClosedRange)->(Bool)-> Int'类型的值转换为 预期的参数类型'(((ClosedRange)-> Int)?'
那么我该如何编写一个非随机的随机函数来交换该函数呢?
答案 0 :(得分:3)
在示例代码中,noRand
应该是一个接受ClosedRange
并返回Int
的函数。
没有理由将其扩展为ClosedRange
。此外,您可以随意查看Int.random
静态方法的签名,并且基本上可以进行复制和粘贴。
它的签名为(ClosedRange<Int>) -> Int
,记为random(in:)
。您的noRand
函数必须具有相同的签名。
因此,这给我们留下了
func noRand(in range: ClosedRange<Int>) -> Int {
return 0
}
请注意,不必将其作为ClosedRange
的扩展名。考虑到仅在测试中使用它的事实,您最好在范围级别进行声明。