2015-12-01 6 views
5
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] 

} 

私はスウィフトでは非常に簡単な占いアプリを作成していると私はarc4random_uniformの問題に実行し続けます。現在、私はただランダムに文字列を描画するためのアプリを取得しようとしているが、私はというエラーを取得:インスタンスメンバーがタイプに使用することはできません「のViewController」

インスタンスメンバー「をfortuneArray」オン「のViewController」

タイプに使用することはできませんここで私は変数randomIndexを宣言しています。私はしばらくの間、Googleを使用してきたが、修正が見つかりませんでした。うまくいけば誰かが助けることができる、ありがとう!

*アップデート* 問題が解決しました!ありがとう。

+0

これらの行は、 'viewDidLoad'のようなメソッド内にありますか、クラス内で定義されていますか? – Fonix

+0

Fonixの回答が役に立った場合は、その横にあるチェックマークをクリックして受け入れてください。 – Adrian

答えて

10

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

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

+0

ありがとう、それは役に立ちます。私はIBActionで 'randomIndex'を使用しています。たぶん私はあなたのコードの詳細を投稿している必要がありますが、あなたが言ったように私はviewDidLoadで変数を宣言する場合、私はその範囲内でのみ使用することができます、と私は信じています。 –

+0

私は物事をより簡単にするために、より多くのコードを追加しました。 –

+0

この回答でMartin Rの記述どおりに変数を 'lazy'宣言できませんか? http://stackoverflow.com/questions/25854300/how-to-initialize-properties-that-depend-on-each-other – Crashalot

0

ああ、私はFonixの助けを借りてそれを理解しました。私はIBActionで乱数を宣言し、それを処理しました。

関連する問題