迅速可平等协议
我是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学徒教程中获得了小贴士)