J'essaie de mettre en place une classe Swift qui doit
Bien que la classe Objective-C que je sous-classe hérite de NSObject, le message d'erreur de compilation suivant s'affiche:
Type DDBItem must conform to protocol 'NSObjectProtocol'
La classe Objective-C et le protocole Objective-C dont je hérite/est mis en oeuvre sont disponibles à l'adresse https://github.com/aws/aws-sdk-ios/blob/master/DynamoDB/AWSDynamoDBObjectMapper.h
AWSDynamoDBModel a une longue chaîne d'héritage qui commence par NSObject AWSDynamoDBModeling applique deux variables de classe.
Mon code est
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 ""
}
}
Question supplémentaire: lorsque je tente d'implémenter les variables de classe mandatées par le protocole Objective-C en tant que variables de classe Swift, je reçois une erreur de compilation:
Type DDBItem must conform to protocol 'AWSDynamoDBModeling'
Leur mise en œuvre en tant que fonction semble être acceptée. Pourquoi ?
Auto répondu pour des raisons d'archivage.
Lors de l'ajout
override func isEqual(anObject: AnyObject?) -> Bool {
return super.isEqual(anObject)
}
pour ma classe, ça marche . Cette méthode aurait dû être héritée de la classe de base.
Ça ressemble à un bug dans Swift/Xcode 6.1
Juste hériter de NSObject:
class DDBItem : NSObject, AWSDynamoDBModel, AWSDynamoDBModeling {
Juste un avertissement pour ceux qui tombent sur ce post. Le protocole AWSDynamoDBModeling
a été modifié dans le dernier SDK (v2.1.1). Fonctions requises: dynamoDBTableName
et hashKeyAttribute
doivent être statiques. La documentation mise à jour aujourd'hui (27/05/2015) semble être périmée.
Exemple:
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)
}
}
Confirmé! Écrivez les fonctions de cette façon:
static func dynamoDBTableName() -> String {
return "pb_Test"
}
static func hashKeyAttribute() -> String {
return "ID"
}
Et vous devez inclure ceci:
override func isEqual(anObject: AnyObject?) -> Bool {
return super.isEqual(anObject)
}