Could you format the text of your post to make it more readable ?
Where do you define JSON type ?
Why do tou use stringValue (because of this, JSON must be declared with AnyObject)
You have to define == func and != fun and declare class as Equatable.
Here is code, where I defined the JSON type
typealias JSON = [String: AnyObject]
class test: Equatable {
var val: String?
var val1: String?
init(data: JSON) {
val = data["val"]?.stringValue ?? "0"
val1 = data["val1"]?.stringValue ?? "0"
}
static func ==(lhs: test, rhs: test) -> Bool {
if (lhs.val == nil && rhs.val != nil) { return false }
if (lhs.val1 == nil && rhs.val1 != nil) { return false }
if (lhs.val != nil && rhs.val == nil) { return false }
if (lhs.val1 != nil && rhs.val1 == nil) { return false }
if lhs.val == nil && rhs.val == nil && lhs.val1 == nil && rhs.val1 == nil { return true }
return (lhs.val == nil && rhs.val == nil && lhs.val1 == nil && rhs.val1 == nil) || ((lhs.val! == rhs.val!) && (lhs.val1! == rhs.val1!))
}
static func !=(lhs: test, rhs: test) -> Bool {
return !(lhs == rhs)
}
}
Multiple tests for nil in == could be simplified with statements as
let left = lhs.val ?? "-"
let left1 = lhs.val1 ?? "-"
Then, no more need to unwrap and risk crash.
static func ==(lhs: test, rhs: test) -> Bool {
let left = lhs.val ?? "-"
let left1 = lhs.val1 ?? "-"
let right = rhs.val ?? "-"
let right1 = rhs.val1 ?? "-"
return (left == right) && (left1 == right1)
}