无法将数据传递给 next ViewController 取决于 UIPickerView textField.text?
Can not pass data to next ViewController depends on UIPickerView textField.text?
当我在选取器视图中 selecting Target 2 时一切正常,下一个视图控制器上的标签文本正在更新,一切正常。但是,如果我 select 目标 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)"
}
当我在选取器视图中 selecting Target 2 时一切正常,下一个视图控制器上的标签文本正在更新,一切正常。但是,如果我 select 目标 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)"
}