Всем доброй ночи!)Начал изуать свифт, азы вроде осваиваю, но вот как в ООП сунулся так - это лес. На просторах инета много инфы, как передавать данные с (T)TextField в (L)Label, или c L в L. Но дело в том, что это простейшая инфа, и совершенно не раскрывает суть передачи данных, манипуляции с памятью с переходом, допустим через Segue, а самое главное не ясны возможные логиги, которые можно применить к той или иной ситуации. Мой вопрос:
Допустим есть у меня 3 VC’a. На 1VC 3 TextField и 1 кнопка. Вводим допустим 3 Интовых числа в каждый (T) и по нажатию должно переходить во второй VC поигрался с кодом, вот что вышло:
// 1 VC
class ViewController: UIViewController {
@IBOutlet weak var numOne: UITextField!
@IBOutlet weak var numTwo: UITextField!
@IBAction func pushNextButton(_ sender: Any) {
if numOne.text! == ""
{
return
}
if numTwo.text! == ""
{
return
}
performSegue(withIdentifier: "nextOne", sender: self)
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationController = segue.destination as! ViewController2
destinationController.enterNumberOne = Int(numOne.text!) // здесь выдает ошибку
destinationController.enterNumberTwo = Int(numTwo.text!) // здесь выдает ошибку
}
// Ошибка в 1VC
// ( cannot assign value of type "Int" to type "UITextField!") хотя тоже самое на втором VC не выдает :confused:
}
// 2 VC
class ViewController2: UIViewController {
var takeOneNum = 0
var takeTwoNum = 0
@IBOutlet weak var enterNumberOne: UITextField!
@IBOutlet weak var enterNumberTwo: UITextField!
@IBAction func nextTwo(_ sender: Any) {
if enterNumberOne.text! == ""
{
return
}
if enterNumberTwo.text! == ""
{
return
}
performSegue(withIdentifier: "nextTwo", sender: self)
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destanationController2 = segue.destination as! ViewController3
destanationController2.answerOne = (enterNumberOne.text! as NSString).integerValue
destanationController2.answerTwo = (enterNumberTwo.text! as NSString).integerValue
}
}
// 3VC
class ViewController3: UIViewController {
@IBOutlet weak var itogOne: UILabel!
@IBOutlet weak var itogTwo: UILabel!
var answerOne = 0
var answerTwo = 0
override func viewDidLoad() {
answerOne * takeOneNum
answerTwo * takeTwoNum
}
@IBAction func closeButton(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
}
Не совсем понимаю логику. Вроде значения с 1 VC -> идут в переменные во 2VC, в 3 уже перемножаютя, ну или любое другое действие. Я не очень пойму как заставить сохраненные данные во втором VC сопрячь с данными во втором VC, толи во втором можно умножить, или это надо делать в 3? Собственно в этом и вопрос.
Итог: как перемножить 1 филд в 1 вью, с 1 филдом во втором вью, и второй филд в первом вью, со вторым филдом во втором вью? Извиняюсь за мой “французский”)
П.С хотелось бы получить краткий ясный ответ для НОВИЧКА в этом деле, с объяснением логики!) Можно прям закоментить в коде. Если еще и ссылочки есть, где объясняется подробно концепция работы с бордом и вью, или что-то подобное, то было бы найс просто. Надеюсь мы справимся!