如何访问数组中的随机索引

时间:2014-06-04 16:56:54

标签: ios arrays variables swift

我正在尝试使用随机索引访问数组,方法是使用arc4random生成随机索引。如果我的“术语的技术用法”不正确,我很抱歉,因为我对开发场景很新。

var backLeft = ["Clear","Drop","Smash"];    
var i = (arc4random()%(3))
var shot = backLeft[i]

这给我第三行错误

Could not find an overload for 'subscript' that accepts the supplied arguments.

但是,如果我使用,

var i = 2
var shot = backLeft[i]

然后它没有给我任何问题。来自php背景,我似乎无法弄清楚这里出了什么问题。

谢谢! :) PS:我正在Swift Playground中的XCODE 6上尝试这个

2 个答案:

答案 0 :(得分:10)

这是由于Swift强制执行类型安全。

arc4random()返回UInt32,下标运算符返回Int

在将i传递给下标运算符之前,您需要确保Int的类型为Int

您可以通过从i

初始化var shot = backLeft[Int(i)] 来完成此操作
i

或者,您可以在将其分配给i然后正常访问var i = Int(arc4random()%(3)) var shot = backLeft[i] 之前对随机值执行相同操作:

{{1}}

答案 1 :(得分:1)

使用Swift 5,如果要从数组中获取随机元素,可以使用Array的{​​{3}}方法:

let array = ["Clear","Drop","Smash"]
let randomElement = array.randomElement()
print(String(describing: randomElement)) // Optional("Smash")

如果要从数组中获取随机索引,可以使用Array的{​​{3}}属性和Range的{​​{3}}方法:

let array = ["Clear","Drop","Smash"]
let randomIndex = array.indices.randomElement()
print(String(describing: randomIndex)) // Optional(1)