ios - 无法将数据传递给下一个ViewController依赖于UIPickerView textField.text?

标签 ios swift xcode segue uipickerview

当我在选择器 View 中选择目标 2 时一切正常,下一个 View Controller 上的标签文本正在更新,一切正常。但是,如果我选择目标 1 - 打开下一个 ViewController,没有任何错误,但标签文本为空 nil。

如果您帮助我或提出其他建议,我将不胜感激。我只是使用 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)"
  }

最佳答案

首先,我认为您缺少最后一个 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)"
}

关于ios - 无法将数据传递给下一个ViewController依赖于UIPickerView textField.text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829988/

相关文章:

ios - Xcode 以蓝色添加文件夹,相关文件未编译

swift - Swift 中的元组与结构

swift - Struct 不能具有引用自身的存储属性,但它可以具有相同类型的数组

ios - iPad 的 Xcode 7 Storyboard问题

ios - 如何做放大和变换动画?

iphone - NSDateFormatter 在凌晨 2 点返回 nil

ios - 无法使计时器 swift 失效

swift - CollectionView Cell 中 Label 的值与旧值重叠一毫秒,​​而 reloadItems()

ios - ld : library not found for -lVuforia

ios - Watchkit 应用程序在安装期间显示错误 - WatchKit 应用程序具有无效的 stub 可执行文件