【问题标题】:picker view array row is will only display 0选择器视图数组行将仅显示 0
【发布时间】:2018-02-26 07:30:54
【问题描述】:

我的 Swift 代码中有一个 int 选择器视图。它在一个称为 numbers 的数组中有数字 1-7。当我要求在 didSelectRow 函数内打印 numbers[row] 时,它会打印正确的数字。但在我的提交点击函数中,它只打印 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()
    })

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

【问题讨论】:

  • 这些解决方案有效,我只是删除了 var。

标签: ios arrays swift int pickerview


【解决方案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)

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      相关资源
      最近更新 更多