迅速可平等协议

我是Swift的教程: https : //www.raywenderlich.com/125311/make-game-like-candy-crush-spritekit-swift-part-1 ,碰到这样的代码:

func == (lhs: Cookie, rhs: Cookie) -> Bool { return lhs.column == rhs.column && lhs.row == rhs.row } 

我写的确切,但Xcode是给我这些错误:

 Consecutive declarations on a line must be separated by ';' Expected declaration operators are only allowed at global scope 

我从苹果的文档中find这个代码: https : //developer.apple.com/documentation/swift/equatable

这和我写的非常相似。 怎么了? 这对我来说似乎是一个错误。 我正在使用Xcode 6 Beta 2

编辑:

这是我的整个Cookie类:

 class Cookie: Printable, Hashable { var column: Int var row: Int let cookieType: CookieType let sprite: SKSpriteNode? init(column: Int, row: Int, cookieType: CookieType) { self.column = column self.row = row self.cookieType = cookieType } var description: String { return "type:\(cookieType) square:(\(column),\(row))" } var hashValue: Int { return row * 10 + column } func ==(lhs: Cookie, rhs: Cookie) -> Bool { return lhs.column == rhs.column && lhs.row == rhs.row } } 

移动这个function

 func == (lhs: Cookie, rhs: Cookie) -> Bool { return lhs.column == rhs.column && lhs.row == rhs.row } 

Cookie类之外。 这是有道理的,因为它在两个Cookie上使用时覆盖全局范围内的==运算符。

SWIFT 2:

正如Equatable 2中NSObject已经符合Equatable 。你不需要遵从顶部,所以它就像

 class Cookie: NSObject { ... } 

而你需要重写isEqual方法

 class Cookie:NSObject{ var column: Int var row: Int //.......... override func isEqual(object: AnyObject?) -> Bool { guard let rhs = object as? Cookie else { return false } let lhs = self return lhs.column == rhs.column } } 

这个isEqual方法是在类里面的。 🙂

编辑SWIFT 3:将此方法更改为

 override func isEqual(_ object: AnyObject?) -> Bool { guard let rhs = object as? Cookie else { return false } let lhs = self return lhs.column == rhs.column } 

使类NSObject解决了对我来说equatable问题…

 class Cookie: NSObject { ... } 

(从iOS学徒教程中获得了小贴士)