ios objective-c swift amazon-dynamodb

ios - Swift: el tipo XXX debe cumplir con el protocolo ''NSObjectProtocol''



objective-c amazon-dynamodb (4)

Estoy tratando de implementar una clase Swift que debe

  1. Heredar de una clase de Objective-C
  2. Implementar un protocolo Objective-C con variable de clase.

Aunque la clase Objective-C que estoy subclasificando está heredando de NSObject, recibo el siguiente error de compilación:

Type DDBItem must conform to protocol ''NSObjectProtocol''

La clase de Objective-C y el protocolo de Objective-C que estoy heredando / implementando están disponibles en https://github.com/aws/aws-sdk-ios/blob/master/DynamoDB/AWSDynamoDBObjectMapper.h

AWSDynamoDBModel tiene una larga cadena de herencia que eventualmente comienza con NSObject. AWSDynamoDBModeling aplica dos variables de clase.

Mi codigo es

class DDBItem : AWSDynamoDBModel, AWSDynamoDBModeling { // class var dynamoDBTableName : String { get { return "" }} // class var hashKeyAttribute : String { get { return "" }} class func dynamoDBTableName() -> String! { return "" } class func hashKeyAttribute() -> String! { return "" } }

Pregunta extra: cuando intento implementar las variables de clase obligatorias del protocolo Objective-C como variables de clase Swift, recibo un error de compilación:

Type DDBItem must conform to protocol ''AWSDynamoDBModeling''

Su implementación como función parece ser aceptada. Por qué ?


¡Confirmado! Escribe las funciones de esta manera:

static func dynamoDBTableName() -> String { return "pb_Test" } static func hashKeyAttribute() -> String { return "ID" }

Y tienes que incluir esto:

override func isEqual(anObject: AnyObject?) -> Bool { return super.isEqual(anObject) }


Auto respondido por el bien del archivo.

Al agregar

override func isEqual(anObject: AnyObject?) -> Bool { return super.isEqual(anObject) }

a mi clase, funciona Este método debería haber sido heredado de la clase base.

A mi me parece un error en Swift / Xcode 6.1


Solo hereda de NSObject:

class DDBItem : NSObject, AWSDynamoDBModel, AWSDynamoDBModeling {


Solo un aviso para aquellos que se topan con este post. AWSDynamoDBModeling protocolo AWSDynamoDBModeling se ha modificado en el último SDK (v2.1.1). Funciones requeridas: dynamoDBTableName y hashKeyAttribute deben ser estáticos. La documentación de hoy (27/05/2015) parece estar desactualizada.

Ejemplo:

class Dingle:AWSDynamoDBObjectModel, AWSDynamoDBModeling { static func dynamoDBTableName() -> String! { return "dev_coupons" } static func hashKeyAttribute() -> String! { return "status " } func rangeKeyAttribute() -> String! { return "post_date" } override func isEqual(object: AnyObject?) -> Bool { return super.isEqual(object) } }