mac for descargar ios swift xcode6

ios - for - xcode mac



Protocolo Swift Equatable (3)

Estaba siguiendo este tutorial para Swift: https://www.raywenderlich.com/125311/make-game-like-candy-crush-spritekit-swift-part-1 y encontré este código:

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

Escribí exactamente eso, pero Xcode está dando mis errores:

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

Encontré este código de la documentación de Apple: https://developer.apple.com/documentation/swift/equatable

Lo cual es muy similar a lo que escribí. ¿Qué pasa? Esto me parece un error. Estoy usando Xcode 6 Beta 2

EDITAR:

Esta es toda mi clase de 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 } }


Mueva esta función

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

Fuera de la clase de cookies. Tiene sentido de esta manera, ya que está anulando el operador == en el ámbito global cuando se utiliza en dos cookies.


hacer que la clase sea un NSObject resolvió los problemas equivalentes para mí ...

class Cookie: NSObject { ... }

(Obtuve la sugerencia de los tutoriales para aprendices de iOS)


SWIFT 2:

Como en swift 2, NSObject ya se ajusta a Equatable . No necesitas conformidad en la parte superior, así que es como

class Cookie: NSObject { ... }

Y debe anular el método de isEqual como

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 } }

Esta vez el método isEqual está dentro de la clase. :)

EDIT para SWIFT 3: cambie este método como

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