swift - DynamoDB Swift 表扫描映射类

标签 swift xcode amazon-web-services amazon-dynamodb

我正在尝试使用 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/

相关文章:

ios - 尝试在iPhone上运行应用时,Xcode错误达到最大应用限制

ios - UICollectionView - 单元格不应滚动到 View 之外

amazon-web-services - 云信息错误:Invalid availability zone: [ap-southeast-2] (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue

amazon-web-services - Azure DevOps Cloudformation 更新堆栈使用参数文件失败(##[错误]ValidationError : Parameters: do not exist in the template)

javascript - AWS websocket 服务器 : 403 error when connecting from browser, 来自 Python

json - 如何在 swift 中使用 utf-8 解码 json 文件 3/4

ios - tableView 不刷新

java - 我是否需要为在 Objective-C 和 Swift 中关闭 Realm 数据库而烦恼?

ios - 如何在 Swift 4 中向 UIView 添加 subview ?

swift - 在运行时切换 iCloud 同步