picker视图数组行只会显示0

时间:2017-09-17 19:02:17

标签: ios arrays swift int pickerview

我在Swift代码中有一个int的选择器视图。它在一个名为数字的数组中有数字1-7。当我要求在didSelectRow函数内打印viewWillAppear时,它会打印正确的数字。但在我提交的tapped函数中,它只打印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() }) 中执行了此操作。

我基本上希望该行是一个变量,我可以将其用作int来延迟一些代码。

{{1}}

有人知道为什么它总是在提交的tapped函数中返回零?

2 个答案:

答案 0 :(得分:1)

简单地替换

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)

您的代码无法正常工作,因为您正在创建新变量并且您没有引用您的实例变量。

答案 1 :(得分:0)

您正在使用days构造函数初始化Int()0构造函数始终为viewWillAppear(_:)。因此,在您的0方法中,days会被打印出来,因为pickerView(_:didSelectRow:inComponent:)初始化为{1}}。但是,在var方法中,您使用days关键字创建一个名为pickerView(_:didSelectRow:inComponent:) 的新变量,该变量位于本地days方法,全局0变量永远不会更改,并且始终等于submitTapped(_:)。因此,稍后在您的days方法中,全局0仍为days

我假设您要将pickerView(_:didSelectRow:inComponent:)方法中的全局numbers[row]变量设置为var。为此,您必须删除dayspickerView(_:didSelectRow:inComponent:)旁边的days关键字。在该方法中,您可以将其引用为self.daysvar,只要您不使用letdays关键字重新声明{{1在那个方法里面