Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Existe outra forma atualmente no Swift para essa função? pois o meu não esta compilando

if let position = selected.index(of: item)
5 respostas

Oi Raphael, tudo bem?

Tem como você postar o resto do código do seu ViewController pra gente dar uma olhada?

Abs.

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    // Pegando conteudo do textdield

    @IBOutlet var nameField : UITextField?
    @IBOutlet var felicidadeField : UITextField?
    var delegate : AddMealDelegate?
    var selected = Array<Item>()

    var items = [Item(name: "Lasanha", calories: 10.0),
                 Item(name: "Brownie", calories: 5.0),
                 Item(name: "chocolate", calories: 7.0),
                 Item(name: "Tomate", calories: 1.0),
                 Item(name: "Sanduiche", calories: 50.0)

                ]
    // selecionando e deselecionando os itens da cedula
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath){
            if (cell.accessoryType == UITableViewCellAccessoryType.none){
                cell.accessoryType = UITableViewCellAccessoryType.checkmark
                let item = items[indexPath.row]
                selected.append(item)
                } else {
                        cell.accessoryType = UITableViewCellAccessoryType.none
                        let item = items[indexPath.row]
                if let position = selected.index(of: item) {
                        selected.remove(at: position)
                }

        }

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }

    // formatando a cedula do main storyboard 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let row = indexPath.row
        let item = items[row]
        let cell = UITableViewCell(style: UITableViewCellStyle.default , reuseIdentifier: nil)
        cell.textLabel!.text = item.name
        return cell
    }

   // Criando a função do buttom

    @IBAction func add(){

        if(nameField == nil || felicidadeField == nil){
            return
        }


        let name:String = nameField!.text!

        if let hapiness = Int(felicidadeField!.text!){

            let meal = Meal(name: name, hapiness: hapiness, items : selected)

        print("comi \(meal.name) e fiquei com felicidade \(meal.hapiness) e \(meal.items) !")

            if(delegate == nil){
                return
            }

            delegate!.add(meal)



            if let navigation = navigationController {
                navigation.popViewController(animated: true)

            }

        }


    }

}

Raphael, tudo bem?

Você pode obter a posição de um elemento no array comparando algum atributo. Nesse caso por exemplo pelo nome da refeição:

if let position = selected.index(where: { $0.name == item.name }) {
    selected.remove(at: position)
}

Abs.

Boa tarde, obrigado pela resposta !

No caso preciso remover o checkmark do item da cédula caso ele esteja marcado ,irei precisar refazer esse código para todas as posições do Array?

solução!

Oi Raphael,

Na verdade esse where é justamente para percorrer todo array (selected) e verificar qual refeição tem o mesmo nome da que você selecionou na TableView.

Assim que o método encontrar, ele entra no if e remove o objeto do array.

Caso tenha ficado alguma dúvida, pode mandar.

Abs.