web-dev-qa-db-ja.com

インスタンスメンバーはタイプ「ViewController」では使用できません

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]

}

Swiftで非常に単純な占いアプリを作成していますが、arc4random_uniformで問題が発生し続けています。現在、アプリにランダムに文字列を描画させようとしています。しかし、次のようなエラーが発生します。

インスタンスメンバー「fortuneArray」はタイプ「ViewController」では使用できません

変数randomIndexを宣言している行。私はしばらくの間グーグルを使用していますが、修正が見つかりません。うまくいけば、誰かが助けてくれるでしょう、ありがとう!

*更新*問題は解決しました!ありがとう。

11
Nicholas L.

貼り付けたコードがviewDidLoadのようなメソッドで定義されていない場合、クラスレベルで定義された変数を、クラスレベルで定義された別の変数に使用することはできません。これらの変数は実行時に決定され、決定される順序は不明であるため、randomIndexが作成される前にfortuneArrayが存在しない可能性があります(実際にはこのように機能しない可能性がありますが、少なくともこのように考えることができます)

これらの変数は、代わりにviewDidLoadまたはinitまたはその他の関数内で計算する必要があります

17
Fonix

ああ、私はフォニックスの助けを借りてそれを理解しました。私はIBActionで乱数を宣言し、それがそれを処理しました。

0
Nicholas L.