Не может передать данные следующему ViewController зависит от UIPickerView textField.text? - PullRequest
0 голосов
/ 22 февраля 2019

Когда я выбираю цель 2 в окне выбора, все работает хорошо, текст меток на следующем контроллере представления обновляется, все в порядке.Но если я выберу цель 1 - открытие следующего ViewController без каких-либо ошибок, но текст меток будет пустым, ноль.

Буду признателен, если вы мне поможете или окажете помощь другим способом.Я просто использую оператор if else для проверки textField.

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let resultsVC = segue.destination as! ResultsViewController

        var declinationDegr = Int()
        if (bodyTextField.text?.contains("Target 1"))! {
            declinationDegr = declinationDegreeTarget1
        } else if (bodyTextField.text?.contains("Target 2"))! {
            declinationDegr = declinationDegreeTarget2
        }
        var declinationMinutes = Double()
        if (bodyTextField.text?.contains("Target 1"))! {
            declinationMinutes = declinationMinutesTarget1
        } else if (bodyTextField.text?.contains("Target 2"))! {
            declinationMinutes = declinationMinutesTarget2
        }
        var declinationDir = String()
        if (bodyTextField.text?.contains("Target 1"))! {
            declinationDir = declinationDirTarget1
        } else if (bodyTextField.text?.contains("Target 2"))! {
            declinationDir = declinationDirTarget2

resultsVC.bdeclString = "\(declinationDegr)º\(String(format: "%.1f", declinationMinutes))'\(declinationDir)"
  }

1 Ответ

0 голосов
/ 22 февраля 2019

Во-первых, я думаю, что вы пропускаете закрывающие фигурные скобки в последнем операторе if / else.

var declinationDir = String()
if (bodyTextField.text?.contains("Target 1"))! {
    declinationDir = declinationDirTarget1
} else if (bodyTextField.text?.contains("Target 2"))! {
    declinationDir = declinationDirTarget2
} // CLOSING BRACE MISSING 

resultsVC.bdeclString = "\(declinationDegr)º\(String(format: "%.1f", declinationMinutes))'\(declinationDir)"

Во-вторых, я бы реорганизовал код, чтобы избежать ненужного сравнения строк и принудительного принудительного сравнения.распаковка:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let resultsVC = segue.destination as? ResultsViewController  else {
        // error handling and
        return
    }
    guard let targetText = bodyTextField.text else {
        // error handling and
        return
    }

    var declinationDegr = Int()
    var declinationMinutes = Double()
    var declinationDir = String()

    if (targetText.contains("Target 1")) {
        declinationDegr = declinationDegreeTarget1
        declinationMinutes = declinationMinutesTarget1
        declinationDir = declinationDirTarget1
    } else if (targetText.contains("Target 2")) {
        declinationDegr = declinationDegreeTarget2
        declinationMinutes = declinationMinutesTarget2
        declinationDir = declinationDirTarget2
    } else {
        // error handling
    }

    resultsVC.bdeclString = "\(declinationDegr)º\(String(format: "%.1f", declinationMinutes))'\(declinationDir)"
}
...