0

我的 Swift 代码中有一个 int 的选择器视图。它在一个名为 numbers 的数组中有数字 1-7。当我要求numbers[row]在函数内部打印时didSelectRow,它会打印正确的数字。但在我的提交点击函数中,它只打印 0。它也这样做了viewWillAppear

我本质上希望该行是一个变量,我可以将其用作 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()
    })

有谁知道为什么它在提交点击函数中总是返回零?

4

2 回答 2

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)

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

于 2017-09-17T19:24:00.597 回答
0

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

我将假设您想将方法中的全局days变量设置为. 为此,您必须删除. 在该方法中,您可以将其引用为or ,只要您不使用or关键字在该方法中重新声明即可pickerView(_:didSelectRow:inComponent:)numbers[row]vardayspickerView(_:didSelectRow:inComponent:)daysself.daysvarletdays

于 2017-09-17T19:22:35.980 回答