2017-09-17 1 views
0

J'ai une vue sélecteur de int dans mon code Swift. Il a les nombres 1-7 dans un tableau appelé nombres. Lorsque je demande d'imprimer numbers[row] à l'intérieur de la fonction didSelectRow, il imprime les numéros corrects. Mais au sein de ma fonction tapée, elle imprime seulement 0. Elle l'a aussi fait en viewWillAppear. Je veux essentiellement que la ligne soit une variable que je peux utiliser comme un int pour retarder le code.La ligne du tableau de sélection du sélecteur affiche uniquement 0

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() 
    }) 

Est-ce que quelqu'un sait pourquoi il retourne toujours zéro dans la fonction d'envoi?

+0

ces solutions fonctionnent j'ai simplement supprimé var. –

Répondre

0

Vous initialisez days en utilisant le constructeur Int(), qui est toujours 0. Ainsi, dans votre méthode viewWillAppear(_:) plus tard, 0 est imprimé, car c'est ce que days a été initialisé. Cependant, dans votre méthode pickerView(_:didSelectRow:inComponent:), vous utilisez le mot-clé var-créer une nouvelle variable appelée days qui est locale à la méthode pickerView(_:didSelectRow:inComponent:), et la variable globale est days jamais changé, et est toujours égal à 0. Par conséquent, plus tard dans votre méthode submitTapped(_:), le days global est toujours 0.

Je vais supposer que vous voulez définir la variable globale days dans votre méthode pickerView(_:didSelectRow:inComponent:) à numbers[row]. Pour ce faire, vous devez supprimer le mot-clé var à côté de days à l'intérieur du pickerView(_:didSelectRow:inComponent:). A l'intérieur de cette méthode, vous pouvez référencer soit comme days ou self.days, aussi longtemps que vous n'utilisez pas le var ou let mot-clé redéclarer days dans cette méthode

1

Remplacez simplement

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

avec

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

Votre code ne fonctionne pas car vous créez une nouvelle variable et vous ne référencez pas votre variable d'instance.