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

Dúvida no Ex. 4 da Aula 6 - Serialização e deserialização Objetos

Estou utilizando a versão 2.1 do Swift e não está aceitando a classe da forma como vista no curso:

== class Item: NSObject, Equatable, NSCoding { ==

Gera o seguinte erro: Redundant conformance of 'Item' to protocol 'Equatable

2 respostas
solução!

Oi Patrik, passei por isso também. Pelo que pude entender o NSObject já faz, na versão 2.X do Swift, o que o Equatable faria. Por tanto voce não precisa implementar o Equatable e, além disso, ao invés de declarar a função fora da classe ==, voce declara a função isEqual, dentro da classe. Por exemplo:

//
//  Item.swift
//  happy-food
//
//  Created by Alishan Tesch on 25/10/15.
//  Copyright © 2015 Alishan Tesch. All rights reserved.
//

import Foundation

class Item: NSObject, /*Equatable,*/ NSCoding {
    let name:String
    let calories:Double
    init(name:String, calories:Double) {
        self.name = name
        self.calories = calories
    }

    required init(coder aDecoder: NSCoder) {
        self.name = aDecoder.decodeObjectForKey("name") as! String
        self.calories = aDecoder.decodeDoubleForKey("calories")
    }

    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(name, forKey: "name")
        aCoder.encodeDouble(calories, forKey: "calories")
    }

    override func isEqual(object: AnyObject?) -> Bool {
        if let rhs = object as? Item {
            return name == rhs.name && calories == rhs.calories
        }
        return false
    }
}
/*func ==(first:Item, second:Item) -> Bool {
        return first.name == second.name && first.calories == second.calories
}*/

Comentei os códigos que precisam ser removidos, e adicionei os novos. Acho que da para entender direitinho.

Espero ter ajudado! Abraço!

Por favor, desconsidere os blocos de código que ainda não viu no curso. Só considere o que já viu e o isEqual. Beleza? Na pressa eu copiei a classe inteira, perdão.

Atenciosamente,