我正在尝试使用 Swift 对 AWS 和 DynamoDB 进行简单的表扫描。我是苹果编程的新手,不确定问题出在哪里。 AWS SDK 的文档全部在 objective-c 中,AWS 为 Swift 提供的示例是垃圾。
我得到的最好的信息来自这里的一个问题,所以我一直在努力解决它。
Best way to make Amazon AWS DynamoDB queries using Swift?
一个问题错误太多,所以我会把它分成多个问题:
我尝试做的第一部分是我的类项目,它定义了数据库“项目”的映射
我已经编写了我的代码,并在每一行下面用粗体显示了我遇到的错误:
class Item : NSObject, AWSDynamoDBModel, AWSDynamoDBModeling {
“项目”不符合协议(protocol)“AWSDynamoDBModeling”
var Artist : String = ""
var SongTitle : String = ""
var AlbumTitle : String = ""
var Category : String = ""
var PictureURL : String = ""
var SongURL : String = ""
var Location : String = ""
var AVGMusicianRating : Int = 0
var AVGUserRating : Int = 0
var SongDuration : Int = 0
var SongID : Int = 0
override init!() { super.init() }
可失败的初始化器“init()”不能覆盖不可失败的初始化器
required init!(coder: NSCoder!) {
fatalError("init(coder:) has not been implemented")
}
class func dynamoDBTableName() -> String! {
return "Songs"
}
class func hashKeyAttribute() -> Int! {
return SongID
}
实例成员“SongID”不能用于类型“Item”(我的哈希键是一个 int 而不是字符串)
//required to let DynamoDB Mapper create instances of this class
override init(dictionary dictionaryValue: [NSObject : AnyObject]!, error: NSErrorPointer)
初始化器不会覆盖其父类(super class)中的指定初始化器
{
super.init(dictionary: dictionaryValue, error: error)
}
//workaround to possible XCode 6.1 Bug : "Type NotificationAck" does not conform to protocol "NSObjectProtocol"
override func isEqual(anObject: AnyObject?) -> Bool {
return super.isEqual(anObject)
}
}
提前致谢。
最佳答案
<强>1。 “项目”不符合协议(protocol)“AWSDynamoDBModeling”
替换
class func hashKeyAttribute() -> Int! {
return SongID
}
通过
class func hashKeyAttribute() -> String! {
return "SongID"
}
说明:您需要提供 hashkey 属性的名称,而不是它的类型。该协议(protocol)要求您返回一个字符串。
<强>2。失败的初始值设定项“init()”无法覆盖非失败的 初始化器
无需扩展 NSObject。您可以从代码中删除所有 init(..) 方法。据我所知,它们是不需要的。
<强>3。实例成员“SongID”不能用于类型“Item”(我的哈希键 是一个整数而不是字符串)
当您修复错误 1 时,这将消失。
<强>4。 Initializer 不会覆盖其指定的初始化器 父类(super class)
当您修复错误 2 时,这将消失
我写了一个tutorial关于将 DynamoDB 用于 Swift 应用程序。 Part 3包含映射到 DynamoDB 的类 AMZUser 的简单示例
关于swift - DynamoDB Swift 表扫描映射类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38631217/