选择器视图数组行将只显示 0
picker view array row is will only display 0
我的 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()
})
有谁知道为什么提交点击函数总是返回零?
您正在使用 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
关键字。在该方法中,您可以将其引用为 days
或 self.days
,只要您不使用 var
或 let
关键字重新声明 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)
您的代码不起作用,因为您正在创建新变量并且没有引用您的实例变量。
我的 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()
})
有谁知道为什么提交点击函数总是返回零?
您正在使用 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
关键字。在该方法中,您可以将其引用为 days
或 self.days
,只要您不使用 var
或 let
关键字重新声明 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)
您的代码不起作用,因为您正在创建新变量并且没有引用您的实例变量。