Olá,
Lendo outros posts deu para perceber que outros colegas passaram pelo mesmo problema que estou passando agora: "Incompatibilidade de versões do Swift". Essa incompatibilidade de versão fez com que o ensinamento repassado pelo vídeo caísse em desuso.
Ao colocar:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "addMeal" {
let view = segue.destinationViewController as ViewController
view.delegate = self
}
}
O compilador retorna um erro dizendo que o retorno do método destinationViewController não é um ViewController e nos força colocar um sinal de exclamação apos a palavra reservada "as".
Implementando a inscrição dada pelo compilador e executando o código, após apertar o botão "Add" do formulário o objeto criado "meal" não é listado na view da tabela.
Gostaria de uma solução para contornarmos esse problema de compatibilidade de sintaxe entre versões para eu dar continuidade no curso. Gostaria que algum professor disponibilizasse um código explicativo que contorna essa situação.
Logo abaixo está o código do ViewController e da MealsTableViewController.
import UIKit
class MealsTableViewController: UITableViewController {
var meals = [Meal(name: "Baião de dois", happiness: 5),
Meal(name: "Pão com ovo", happiness: 4)]
func add(meal: Meal) {
meals.append(meal)
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return meals.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let row = indexPath.row
let meal = meals[row]
let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)
cell.textLabel!.text = meal.name
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "addMeal" {
let view = segue.destinationViewController as! ViewController
view.delegate = self
}
}
}
import UIKit
class ViewController: UIViewController {
@IBOutlet var nameField: UITextField?
@IBOutlet var happinessField: UITextField?
var delegate: MealsTableViewController?
@IBAction func add() {
if nameField == nil || happinessField == nil {
return
}
let name = nameField!.text
let happiness = Int(happinessField!.text!)
if happiness == nil {
return
}
let meal = Meal(name: name!, happiness: happiness!)
if delegate == nil {
return
}
delegate!.add(meal)
print("Eaten: \(meal.name) \(meal.happiness)")
if let navigation = self.navigationController {
navigation.popViewControllerAnimated(true)
}
}
}