Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何使两个变量相互依赖_Arrays_Swift_Button_Data Structures - Fatal编程技术网

Arrays 如何使两个变量相互依赖

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

我有一个问题:我有两个文本字段,一个是包含数组的pickerView,另一个是文本字段,根据在pickerView中所做的选择,您需要在其中输入特定代码才能按下按钮。这就是我得到的

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个不同的选项,代码会很快变得很长。你有没有其他的解决方案,可以为许多选择工作?我不知道我是否理解你的问题。你想具体说明什么?这很有效,但如果你检查我的答案,实际上只需要一个数组,我认为这是一个更干净的方法。