2017-09-17 5 views
0

私はスウィフトコードでintのピッカービューを持っています。それは数字と呼ばれる配列に1から7の数字を持っています。 didSelectRow機能の中にnumbers[row]を印刷するように頼むと、正しい番号が印刷されます。しかし、私の提出タップ関数では、それは0だけを出力します。これはviewWillAppearでも同様でした。ピッカービュー配列の行は0だけ表示されます

私は基本的に行を変数として使用して、あるコードを遅延させるためにintとして使うことができます。

let numbers = [1,2,3,4,5,6,7] 
var days = Int() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.pickerView.delegate = self 
    self.pickerView.dataSource = self 
} 

override func viewWillAppear(_ animated: Bool) { 
    print(days) 
} 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return String(numbers[row]) 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return numbers.count 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    var days = numbers[row] 
    print(days) 
} 

@IBAction func submitTapped(_ sender: Any) { 
    databaseRef.child("numbers").child(self.TextField.text!).setValue(["thename" : UserDefaults.standard.value(forKey: "nametext")]) 
    print(days) 
    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(days) , execute: { 
     databaseRef.child("numbers/\(self.TextField.text!)").removeValue() 
    }) 

送信タップ関数で常にゼロを返す理由を知っている人はいますか?

+0

これらのソリューションは私が単純にvarを削除して動作します。 –

答えて

0

コンストラクタ(常に0)を使用してdaysを初期化しています。したがって、後でviewWillAppear(_:)メソッドで0が出力されます。これはdaysが初期化されたためです。しかし、あなたのpickerView(_:didSelectRow:inComponent:)方法では、あなたがvarキーワードを使用しているがpickerView(_:didSelectRow:inComponent:)方法にローカルあるdaysと呼ばれる新しい変数を作成し、グローバルdays変数が変更されることはありません、と常に0に等しいです。したがって、後でsubmitTapped(_:)メソッドでは、グローバルdaysはまだ0です。

pickerView(_:didSelectRow:inComponent:)メソッドのグローバルdays変数をnumbers[row]に設定するとします。これを行うには、pickerView(_:didSelectRow:inComponent:)の中のdaysの横にあるvarキーワードを削除する必要があります。そのメソッド内で、あなたは、単に置き換える限り、あなたはその方法

1

daysを再宣言するvarまたはletキーワードを使用しないように、どちらかdaysまたはself.daysとしてそれを参照することができ

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    var days = numbers[row] 
    print(days) 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    days = numbers[row] 
    print(days) 

新しい変数を作成していて、インスタンス変数を参照していないため、コードが機能しません。

関連する問題