Ios 实例成员不能用于类型';ViewController';

Ios 实例成员不能用于类型';ViewController';,ios,swift,random,arc4random,Ios,Swift,Random,Arc4random,我在Swift中创建了一个非常简单的算命应用程序,我一直遇到arc4random_uniform的问题。目前,我正试图让应用程序随机绘制一个字符串,但我收到一个错误,错误是: 实例成员“fortuneArray”不能用于类型“ViewController” 在我声明变量的行上randomIndex。我已经使用谷歌有一段时间了,但还没有找到解决办法。希望有人能帮忙,谢谢 *更新* 问题解决了!谢谢。如果粘贴的代码未在类似viewDidLoad的方法中定义,则不能将在类级别定义的变量用于在类级别定义

我在Swift中创建了一个非常简单的算命应用程序,我一直遇到
arc4random_uniform
的问题。目前,我正试图让应用程序随机绘制一个字符串,但我收到一个错误,错误是:

实例成员“fortuneArray”不能用于类型“ViewController”

在我声明变量的行上
randomIndex
。我已经使用谷歌有一段时间了,但还没有找到解决办法。希望有人能帮忙,谢谢

*更新*
问题解决了!谢谢。

如果粘贴的代码未在类似
viewDidLoad
的方法中定义,则不能将在类级别定义的变量用于在类级别定义的另一个变量。这些变量是在运行时确定的,它们确定的顺序未知,因此在创建randomIndex之前,Fortune数组可能不存在(在幕后可能不是这样工作的,但至少可以这样想)


你应该在
viewDidLoad
init
或其他函数中计算这些变量,而不是啊,我是在Fonix的帮助下计算出来的。我在iAction中声明了随机数,这就解决了问题。

这些行是在类似
viewDidLoad
的方法中还是在类中定义的?如果Fonix的答案对您有所帮助,您应该单击旁边的复选标记来接受它。谢谢,这很有帮助。不过我在IBAction中使用了“randomIndex”。也许我应该发布更多的代码,但如果我像你说的那样在viewDidLoad中声明变量,我相信我只能在该范围内使用它。你能不能像Martin R在这个答案中所描述的那样声明变量
惰性
@Crashalot我认为只有在这种情况下才有效,因为延迟加载变量中使用的变量的初始值不是在运行时计算的,我确信2个延迟加载变量将不能像最初的问题那样以那种方式相互依赖,因为这有点像一个依赖循环。根本没有测试过,所以可能我错了
class ViewController: UIViewController {    

let fortuneArray = ["You will find true love in the summer.", "Outlook not good", "You may find great success in business soon.", "Watch out for grey cats."]
let randomIndex = Int(arc4random_uniform(fortuneArray.count))

override func viewDidLoad() {
    super.viewDidLoad()
    let randomIndex = Int(arc4random_uniform(UInt32(fortuneArray.count)))
    print("random index: ")
    print(randomIndex)
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// actions
@IBAction func cookiePressed(sender: AnyObject) {
    fortune.text = fortuneArray[randomIndex]

}