Swift 3 解析查询

Posted

技术标签:

【中文标题】Swift 3 解析查询【英文标题】:Swift 3 Parse query 【发布时间】:2016-09-10 08:31:20 【问题描述】:

我将 swift 2 更新为 swift 3 后出现错误

var nicknames = [String]()
var messages = NSArray()
var selectedmsg:PFObject!

query.findObjectsInBackground
(objects, error) -> Void in

if error == nil

 messages = objects!   ***Cannot assign value of type '[PFObject]?' to type 'NSArray'***

for object in objects! 

  self.nicknames.append(object.object(forKey: "userpointer")!.object(forKey: "nickname") as! String)  ***Value of type 'Any' has no member 'object'***



self.selectedmsg = messages.object(at: (indexPath as NSIndexPath).row) as! PFObject

self.selectedmsg["file"]!.getDataInBackground ***Value of type 'Any' has no member 'getDataInBackground'***

***之间的代码有三个错误

代码在 swift 2 中运行良好,有人可以帮我在 swift 3 中修复相同的代码吗 请任何帮助将不胜感激。

【问题讨论】:

为什么这个网站没有答案了? 你是怎么解决的 我也遇到了同样的问题,这是你的第二个错误? @saner 显示您在 pastebin.com 中的错误代码 【参考方案1】:

一如既往,除非别无选择,否则不要在 Swift 中使用 NSArray

NSArray 不提供任何类型信息,因此编译器不知道它实际上包含PFObject 对象。

在这种情况下,您可以选择!通过将messages 声明为

来启发编译器
var messages = [PFObject]()

这个微小的改变将解决所有三个错误。

【讨论】:

谢谢,它只修复了第一个错误。但我仍然有错误,因为 var 消息已更改为 pfobject。看到这个:i.gyazo.com/bb014d1d308b57c67b8bf05714f54492.png 您必须将Any 值转换为正确的类型。如果密钥订阅不起作用,请尝试objectForKey 您能否编辑您的答案并向我展示代码示例以及如何像使用 NSArray 一样获取每一行?会有帮助的。 这取决于字典中值的类型。例如键file 的值很可能是PFObject,所以你写(self.selectedmsg["file"] as! PFObject).getDataInBackground...,而不是objectAtIndex 尝试索引下标objects[indexPath.row]。不幸的是,我根本不使用 Parse。你也可以尝试重新输入方法以获得准确的 Swift 3 语法。【参考方案2】:

我遇到了同样的问题。我不得不更改以修复我的应用程序无法在 Swift 3 中工作

AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

并准备好转场:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

【讨论】:

谢谢,我已经改成那个func应用了,但是还是一样的错误。我不知道准备 segues,因为 appdelegate 默认我没有在那里添加函数

以上是关于Swift 3 解析查询的主要内容,如果未能解决你的问题,请参考以下文章

Swift 解析查询结果未出现在 tableview 中

解析错误处理 swift 3

Swift 3 中的 JSON 解析

Swift 3 解析 JSON 嵌套问题

JSON解析错误Swift 3

使用 swift 3 更改解析推送通知