Есть некоторые проблемы с тем, что вы пытаетесь сделать. Во-первых, вам не следует устанавливать содержимое представления в контроллере представления назначения в prepareForSegue. Вы можете вычислить значение, а затем передать его, как предложил Филипп. Сначала вы должны рассчитать это. Еще одна проблема заключается в том, что вы не можете запускать математические операторы для текста, что, похоже, вы пытаетесь сделать. Вы можете привести String в Int или Double, и он вернется как необязательный на тот случай, если текст на самом деле не содержит числа. Было бы безопаснее всегда условно развернуть, но я думаю, что для вашего случая вы могли бы сделать что-то вроде добавления расширения в String, чтобы вернуть либо необязательное двойное значение текста, либо ноль, если оно равно nil
(таким образом, это не не оказывает никакого влияния на результат). Так что добавьте это в свой проект вне каких-либо классов:
extension String {
func doubleValue() -> Double {
return Double(self) ?? 0
}
}
Теперь в вашем первом V C вы можете добавить эту функцию ниже, чтобы сделать свой расчет. Я собираюсь предположить, что вы пропустили некоторый код, потому что в предоставленном вами коде вы не объявили много этих различных меток и textFields (dNTPsVolumeLabel, forwardPrimerLabel и др. c). Итак, если у вас уже есть такие как часть вашего первого V C, что-то вроде этого должно работать нормально:
func getWaterVolumeLabelText() -> String? {
numberOfSamplesTextField.text?.doubleValue() * (50.0 - dNTPsVolumeLabel.text?.doubleValue() - forwardPrimerLabel.text?.doubleValue() - reversePrimerLabel.text?.doubleValue() - dnaPolymeraseLabel.text?.doubleValue() - volumeOfTemplateDNAtextfield.text?.doubleValue() - bufferVolumeLabel.text?.doubleValue())
}
Теперь у вас есть функция, которая будет выполнять ваши вычисления для вас при запуске перехода , Все, что вам нужно сделать, это передать его целевому ViewController. Самый простой способ сделать это - просто добавить строковое свойство в целевой контроллер вида, что-то вроде этого:
class MasterMixTableViewController: UIViewController{
// This is would be your label in your destination view controller
@IBOutlet weak var waterVolumeLabel: UILabel!
// Add this
public var waterVolumeText: String?
override func viewWillAppear(_ animated: Bool) {
// Here you can do whatever with the passed-in string
waterVolumeLabel.text = waterVolumeText
}
}
Теперь go вернуться к методу подготовки к переходу в вашем SelectAttributesViewController и просто изменить это к этому:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let masterMix = segue.destination as! MasterMixTableViewController
masterMix.loadViewIfNeeded()
// This will pass the value along
masterMix.waterVolumeText = getWaterVolumeLabelText()
}