2017-01-02 4 views
0

変数から読み込む必要があるIBActionがあります。ただし、viewDidLoadの外部に変数を配置すると、エラーが発生するエラー? IBActionボタン内の変数を読み取る

プロパティの初期化子内でインスタンスメンバー 'animal'を使用できません。プロパティ初期化子は 'self'が利用可能になる前に実行されます

マイコードは以下のとおりです。私はviewDidLoadエラー状態の内側に戻って変数を移動するとanimalNameは、あなたの財産animal.speciesId前にanimalNameを初期化しようとしているので、これが起こる

var animalName = (String(format: "%03d", animal.speciesId!)) 

@IBAction func megaKeyIBO(_ sender: Any) { 
    animalName = (String(format: "%03d", animal.speciesId!)) + "-merg" 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //variable was originally here before moving to top 
    var animalName = (String(format: "%03d", animal.speciesId!)) 
} 

宣言されていない
+0

「動物」の定義を見る必要がありますが、インスタンスメンバーのように聞こえますが、プロパティ初期化プログラムが実行されます。 –

+0

初期化時に 'animalName'を設定する必要がありますか?それをオプションにして、 'viewDidLoad'で初期化してみましょう。 – toddg

答えて

0

であることを!が初期化されました。解決する単純な方法は、このようになります:

あなたは彼らだけが使用するために宣言されている機能で作業 viewDidLoad()

ローカル変数で宣言ローカル変数として変数animalNameを使用している

var animalName: String! 

@IBAction func megaKeyIBO(_ sender: Any) { 
    animalName = (String(format: "%03d", animal.speciesId!)) + "-merg" 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Initialize on viewDidLoad 
    animalName = (String(format: "%03d", animal.speciesId!)) 
} 
+0

ええと、それはいつも私を理解するのにもっとも時間がかかる最も単純な1ライナーです。 – user4938361

0

それを作成したボタンのanimalNameはインスタンス変数またはボタンの関数として宣言する必要があります

関連する問題