菜鸟教程小白 发表于 2022-12-11 18:27:48

ios - 尝试将 AWS DynamoDB 与 Swift 3 一起使用时出现很多错误


                                            <p><p>我是快速开发的新手,正在尝试合并后端。我认为 AWS 将是完成我想要完成的事情的好方法。我目前只是试图让他们为您创建的示例项目文件工作,它有很多错误,令人难以置信。我意识到 AWS 在 Swift 2 中创建文件,因此在 Swift 3 中运行它们非常困难。</p>

<p>当我在 xCode 中打开代码时,我将代码转换为 Swift 3,之后可能对行进行了 30 次更改,只是试图消除所有可能出现的错误。现在我被困住了。在某些行中,我只是不知道该怎么做才能修复它。我将在下面列出一些,但如果有人对解决此问题的最佳方法有任何提示或可以帮助我解决以下错误,我将不胜感激。</p>

<p>1) 这里的问题在于 <code>model.classForCoder.responds(to: #selector(AWSDynamoDBModeling.rangeKeyAttribute))</code>。错误提示 <em>“不能调用非函数类型的值 ((Selector -> Bool)!”</em></p>

<pre><code>func produceOrderedAttributeKeys(_ model: AWSDynamoDBObjectModel) -&gt; {
    let keysArray = Array(model.dictionaryValue.keys)
    var keys = keysArray as!
    keys = keys.sorted()

    if (model.classForCoder.responds(to: #selector(AWSDynamoDBModeling.rangeKeyAttribute))) {
      let rangeKeyAttribute = model.classForCoder.rangeKeyAttribute!()
      let index = keys.index(of: rangeKeyAttribute)
      if let index = index {
            keys.remove(at: index)
            keys.insert(rangeKeyAttribute, at: 0)
      }
    }
</code></pre>

<p>2) <em>"== 产生 Bool 而不是预期的上下文结果类型 'NSNumber'"</em></p>

<pre><code>class func randomSampleBOOL() -&gt; NSNumber {
    // If random number is even number then return true, false for odd numbers
    return self.randomNumber() % 2 == 0
}
</code></pre>

<p>3) 问题在于 <code>loadNextPage(completionHandler)</code> 行。 <em>“传递给不带参数的调用的参数”</em></p>

<pre><code>func loadMoreResults() {
    loading = true
    paginatedOutput?.loadNextPage(completionHandler: {(error: NSError?) -&gt; Void in
      if error != nil {
            print(&#34;Failed to load more results: \(error)&#34;)
            DispatchQueue.main.async(execute: {
                self.showAlertWithTitle(&#34;Error&#34;, message: &#34;Failed to load more more results: \(error?.localizedDescription)&#34;)
            })
      }
      else {
            DispatchQueue.main.async(execute: {
                self.results!.append(contentsOf: self.paginatedOutput!.items)
                self.tableView.reloadData()
                self.loading = false
            })
      }
    })
}
</code></pre>

<p>4) 问题在于 <code>objectMapper.load</code>。 <em>无法将类型 '(AWSDynamoDBObjectModel?, NSError?) -> Void' 的值转换为预期的参数类型 '((AWSDynamoDBObjectModel?, Error?) -> Void)?'</em></p>

<pre><code> func getItemWithCompletionHandler(_ completionHandler: @escaping (_ response: AWSDynamoDBObjectModel?, _ error: NSError?) -&gt; Void) {
    let objectMapper = AWSDynamoDBObjectMapper.default()
    objectMapper.load(Orders.self, hashKey: &#34;demo-email-3&#34;, rangeKey: 1111500000, completionHandler: {(response: AWSDynamoDBObjectModel?, error: NSError?) -&gt; Void in
      DispatchQueue.main.async(execute: {
            completionHandler(response, error)
      })
    })
}
</code></pre>

<p>5) <em>无法使用类型为“(Orders.Type, expression: AWSDynamoDBScanExpression, (AWSDynamoDBPaginatedOutput?, NSError?) -> ())'的参数列表调用“scan”</em></p>

<pre><code>let objectMapper = AWSDynamoDBObjectMapper.default()
    let scanExpression = AWSDynamoDBScanExpression()
    scanExpression.filterExpression = &#34;begins_with(#email, :email)&#34;
    scanExpression.expressionAttributeNames = [&#34;#email&#34;: &#34;email&#34;]
    scanExpression.expressionAttributeValues = [&#34;:email&#34;: &#34;demo-&#34;]

    objectMapper.scan(Orders.self, expression: scanExpression) { (response: AWSDynamoDBPaginatedOutput?, error: NSError?) in
</code></pre>

<p>6) 最后,有 15 个实例方法“getItemWithCompletionHandler”几乎与协议(protocol)“Table”的可选要求“getItemWithCompletionHandler”相匹配,具有各种不同的方法名称等。这些只是警告,但有人建议我将其设为私有(private)或添加 <code>@nonobjc</code>,但我不知道应该怎么做。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>面向 futureGoogle 员工的更新:
我设法通过将第一个更改为:</p>

<pre><code>if let rangeKeyAttribute = model.classForCoder.rangeKeyAttribute?() {
      let index = keys.index(of: rangeKeyAttribute)
      if let index = index {
            keys.remove(at: index)
            keys.insert(rangeKeyAttribute, at: 0)
      }
    }
</code></pre>

<p>我对数字 2 感到困惑,因为注释说“返回真,奇数返回假”,但函数返回一个 NSNumber。我将其更改为返回 Bool 并修复了错误,但这似乎是他们会犯的一个奇怪的错误。我觉得这也会导致 Swift 2 中的错误。其他的我也没搞清楚……</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 尝试将 AWS DynamoDB 与 Swift 3 一起使用时出现很多错误,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41402926/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41402926/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 尝试将 AWS DynamoDB 与 Swift 3 一起使用时出现很多错误