2016-07-28 43 views
0

我正在尝试使用Swift对AWS和DynamoDB执行简单的表扫描。我是苹果编程的新手,不确定问题是什么。 AWS SDK的文档都是客观的C,AWS给Swift的例子都是垃圾。DynamoDB Swift Table扫描映射类

我得到的最好的信息是来自一个问题,所以我一直试图通过它。

Best way to make Amazon AWS DynamoDB queries using Swift?

有太多的错误了一个问题,所以我将它分解成多个问题:

我试图做的第一部分是我的类项目从数据库“定义的映射项目”

我写我的代码和我得到的每一行下面以粗体显示的错误:

class Item : NSObject, AWSDynamoDBModel, AWSDynamoDBModeling { 

'项目' 不符合协议 '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() } 

Failable初始化为 'init()' 无法重写非failable初始化

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

1 '项目' 不符合协议 'AWSDynamoDBModeling'

更换

class func hashKeyAttribute() -> Int! { 
    return SongID 
} 

通过

class func hashKeyAttribute() -> String! { 
    return "SongID" 
} 

说明:您需要提供hashkey的名字属性,而不是类型。该协议要求您返回一个字符串。

2. Failable初始化为 'init()' 无法重写非failable 初始化

没有必要延长NSObject的。您可以从代码中删除所有init(..)方法。据我所知,他们并不需要。

3实例成员“SongID”不能在类型“项”使用(我的散列关键字 是一个int不串)

当你修正错误1这将消失。

4.初始化程序不从 超

当你修正错误2

我写了一个关于tutorial使用DynamoDB的斯威夫特应用程序会随风而逝覆盖一个指定初始化。 Part 3包含映射到DynamoDB的AMZUser类的简单示例

+0

感谢您的帮助,这确实回答了我问的问题。我已经尝试使用你的教程,但不幸的是我必须做一个全表扫描。所以我不得不回过头来研究如何以客观的方式做到这一点。对于这样一家大公司,您会认为AWS可以编制与当前标准相关的文档。 –