Arrays 如何使两个变量相互依赖
我有一个问题:我有两个文本字段,一个是包含数组的pickerView,另一个是文本字段,根据在pickerView中所做的选择,您需要在其中输入特定代码才能按下按钮。这就是我得到的Arrays 如何使两个变量相互依赖,arrays,swift,button,data-structures,Arrays,Swift,Button,Data Structures,我有一个问题:我有两个文本字段,一个是包含数组的pickerView,另一个是文本字段,根据在pickerView中所做的选择,您需要在其中输入特定代码才能按下按钮。这就是我得到的 var SchoolsArray = ["Option 1", "Option 2", "Option 3", "Option 4"] var code1 = "zxy" // code for Option 1 var
var SchoolsArray = ["Option 1",
"Option 2",
"Option 3",
"Option 4"]
var code1 = "zxy" // code for Option 1
var code2 = "gbv" // code for Option 2
var code3 = "jwn" // code for Option 3
var code4 = "hqc" // code for Option 4
@IBOutlet weak var firstNameTxtField: UITextField!
@IBOutlet weak var schoolNameTxtField: UITextField!
@IBOutlet weak var schoolCodeTxtField: UITextField!
@IBAction func createAccountBtnPressed(_ sender: Any) {
if firstNameTxtField.text != nil && schoolNameTxtField.text != nil && schoolCodeTxtField.text != nil {
if schoolNameTxtField.text == "Option 1" && schoolCodeTxtField.text == code1 {
//do something here
} else {
}
} else {
}
}
如您所见,只有选择选项1,此选项才有效。我如何才能使这项工作,因此,如果您选择“选项1”并在schoolCodeTxtField中输入“zxy”,它将继续进行,如果您选择“选项2”并输入“gbv”,它也将继续进行,依此类推。我希望你明白我的意思。非常感谢所有帮助如何使用一个字典,其中包含选项作为键,代码作为值。大概是这样的:
var SchoolsOptions = ["Option 1": "zxy",
"Option 2": "gbv",
"Option 3": "jwn",
"Option 4": "hqc"]
@IBAction func createAccountBtnPressed(_ sender: Any) {
if firstNameTxtField.text != nil && schoolNameTxtField.text != nil && schoolCodeTxtField.text != nil {
for (option, code) in SchoolsOptions {
if schoolNameTxtField.text == option && schoolCodeTxtField.text == code {
//do something here
// You only get here if the option and code match for that given school. If you need specific logic for each school you'll have to check which option you're on.
}
}
} else {
}
}
与
SchoolArray
一样,您也可以对代码使用数组,并使用以下方法:
var CodesArray = ["zxy", "gbv", "jwn", "hqc"]
@IBAction func createAccountBtnPressed(_ sender: Any) {
guard
firstNameTxtField.text != nil,
let option = schoolNameTxtField.text,
let index = SchoolsArray.index(where: { $0 == option }),
CodesArray[index] == schoolCodeTxtField.text
else {
return
}
// Code & Option both matched
}
这是我能马上想到的最干净的解决方案
@IBOutlet weak var firstNameTxtField: UITextField!
@IBOutlet weak var schoolNameTxtField: UITextField!
@IBOutlet weak var schoolCodeTxtField: UITextField!
var codeArray: [String] = [
"zxy",
"gbv",
"jwn",
"hqc"
]
var selectedCode: String!
override func viewDidLoad() {
super.viewDidLoad()
setupPickerViewAndAssignItsDelegateAndDatasource()
guard let selectedCode = codeArray.first else { return }
self.selectedCode = selectedCode
}
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return codeArray.count
}
public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "Option \(row + 1)"
}
public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
selectedCode = codeArray[row]
}
@IBAction func createAccountBtnPressed(_ sender: Any) {
if firstNameTxtField.text != nil && schoolNameTxtField.text != nil && schoolCodeTxtField.text != nil {
if schoolNameTxtField.text == selectedCode {
//do something here
} else {
}
} else {
}
}
这个解决方案是可行的,但是如果我有30个不同的选项,代码会很快变得很长。你有没有其他的解决方案,可以为许多选择工作?我不知道我是否理解你的问题。你想具体说明什么?这很有效,但如果你检查我的答案,实际上只需要一个数组,我认为这是一个更干净的方法。