我迅速有一个测验程序。一切正常,但是我想通过使用函数而不是将每个项目分开来提高效率!
感谢您的帮助!
我在操场上尝试使用:
func random( a:Int, b:Int, c:Int) -> (Int, Int, Int)
return Int(arc4random_uniform(UInt32(a, b, c)))
我收到一个错误消息:
不能为类型为'(Int,Int,Int)'的参数列表调用'UInt32'类型的初始化程序
答案 0 :(得分:5)
您有几个问题。
arc4random_uniform()
。arc4random_uniform()
仅使用一个UInt32
,而您尝试通过将三个Int
传递给UInt32
初始化程序(这是一个不存在的初始化程序)的结果)。我建议使用Int.random(in:)
而不是arc4random_uniform()
:
func random(a: Int, b: Int, c: Int) -> (Int, Int, Int) {
return (.random(in: 0..<a), .random(in: 0..<b), .random(in: 0..<c))
}
注意:您无需在调用Int
中显式使用Int.random(in: 0..<a)
,因为Swift可以从返回类型推断出Int
的功能。
示例:
for _ in 1...20 {
print(random(a: 2, b: 6, c: 100))
}
(0, 3, 5) (0, 1, 32) (0, 1, 90) (0, 3, 17) (1, 0, 34) (0, 1, 78) (1, 0, 71) (0, 1, 85) (1, 0, 27) (1, 0, 26) (0, 0, 93) (0, 1, 46) (1, 4, 47) (1, 1, 12) (0, 2, 21) (1, 3, 72) (0, 2, 62) (0, 5, 50) (1, 2, 23) (1, 4, 21)
替代实施
通过获取可变数量的最大输入并返回一个数组,您可以灵活地处理所需数量的随机数:
func random(maxVals: Int...) -> [Int] {
return maxVals.map { .random(in: 0..<$0) }
}
示例:
print(random(maxVals: 2, 6, 100))
[1, 4, 57]
print(random(maxVals: 2, 6))
[0, 5]
答案 1 :(得分:0)
您具有一个带有以下签名的功能:(Int, Int, Int) -> Int
。
函数arc4random_uniform
必须应用于UInt32而不是Int。
如果转换a,b,c会很好!