我试图用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:我在XCODE 6雨燕游乐场内尝试这种
这是由于类型安全的斯威夫特的执行。
arc4random()
返回UInt32
,下标运算符将Int
。
你需要确保i
的类型是Int
的传递到下标运算符之前。
您可以通过初始化从Int
的i
这样做:
var shot = backLeft[Int(i)]
或者,你可以在分配给i
然后正常访问i
之前做同样的随机值:
var i = Int(arc4random()%(3))
var shot = backLeft[i]
随着斯威夫特5,如果你想从数组中获得一个随机元素,你可以使用Array
的randomElement()
方法:
let array = ["Clear","Drop","Smash"]
let randomElement = array.randomElement()
print(String(describing: randomElement)) // Optional("Smash")
如果你想从数组中随机获得一个指标,你可以使用Array
的indices
财产和Range
的randomElement()
方法:
let array = ["Clear","Drop","Smash"]
let randomIndex = array.indices.randomElement()
print(String(describing: randomIndex)) // Optional(1)