我正在尝试使用随机索引访问数组,方法是使用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上尝试这个
答案 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)