как прагматично создать коллекцию IBOutlet (swift4) - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь сложить все текстовые поля, используя коллекцию розеток, проблема ставится во все текстовые поля программно, поэтому я не могу перетащить ее в коллекцию.Как я могу сделать это программно?Вы можете видеть, что я пытался сделать, но это вызывает ошибку компиляции.

var a28 = UITextField()
var a29 = UITextField()
    @objc func hitA31(_ textField: UITextField) {

    var fullTotal = 0
    for view in a28,a29 {
        if let text = view.text, let num = Int(text) {
            fullTotal += num

        }
    }
    a31.text = String(fullTotal)
}

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018
 lazy var textFileds : [UITextField] = {
        var temptextField: [UITextField] = []
        for v:AnyObject in self.view.subviews {
            if v is UITextField {
                temptextField.append(v as! UITextField)
            }
        }
        return temptextField
    }()

...

По сути, он перебирает все подпредставления и проверяет, является ли один из них UITextField.В этом случае он добавляется во временный массив.Этот временный массив затем используется для отложенного создания экземпляра массива textFileds.

это все ваши textFileds, когда вы можете добавить итоги, как это

func getFullNumber () {
    var fullNumber = 0
    for txtfield in textFileds {
      let txtString = txtfield.text ?? ""
      let number = Int(txtString) ?? 0
      fullNumber += number
    }
    a31.text = String(fullNumber)
}
0 голосов
/ 20 сентября 2018

IBOutlet коллекция это просто массив.В этом нет ничего особенного.

let textFields = [a28, a29]

for view in textFields {
}

или

let fullTotal = [a28, a29]
  .compactMap { Int($0.text ?? "") }
  .reduce(0, +)
0 голосов
/ 20 сентября 2018

Вы можете просмотреть все ваши подпредставления следующим образом:

func hitA31() {
    var fullTotal = 0
    for case let textField as UITextField in view.subviews {
        // You can add validation if the textField is only for a28 and a29
        if let text = textField.text, let num = Int(text) {
            fullTotal += num
        }
    }
    a31.text = String(fullTotal)
}
...