【问题标题】:How to have two variables depending on each other如何让两个变量相互依赖
【发布时间】:2018-01-09 19:17:12
【问题描述】:

我有这个问题:我有两个文本字段,一个包含数组的 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”它也会继续等等。我希望你明白我的意思。感谢所有帮助

【问题讨论】:

    标签: arrays swift button data-structures


    【解决方案1】:

    就像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
    
    }
    

    【讨论】:

    • 这个解决方案有效,但如果我让说 30 个不同的选项,代码会很快变得很长。您还有其他适用于多种选择的解决方案吗?
    【解决方案2】:

    如何使用包含您的选项作为键和您的代码作为值的字典。像这样的:

    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 {
    
        }
    }
    

    【讨论】:

    • 我不确定我是否理解您的问题。您要指定什么?
    • 这没问题,但如果你检查我的答案,真的只需要一个数组,我认为它是一种更清洁的方法。
    【解决方案3】:

    这是我能想到的最干净的解决方案。

    @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 {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      相关资源
      最近更新 更多