![](/img/trans.png)
[英]'[AnyObject]?' is not convertible to 'NSArray'(xcode,swift)
[英]"[AnyObject]? is not convertible to 'NSArray'
这是我的另一个问题。
在通过应用进行编码时,我正在使用Parse Framework,并且正在使用查询从数据库中获取用户名:
var showUsername:PFQuery = PFUser.query()!
//showUsername.whereKey("objectId", equalTo: post.objectForKey("user")!.objectId)
showUsername.whereKey("objectId", equalTo: post.objectForKey("user")!)
showUsername.findObjectsInBackgroundWithBlock{
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil{
let user:PFUser = (objects as NSArray!).lastObject as! PFUser
cell.usernameLabel.text = user.username
}
}
我在这两行代码中遇到了麻烦:
//showUsername.whereKey("objectId", equalTo: post.objectForKey("user")!.objectId)
我把它注释掉了,因为它说.objectID是错误的,所以如果我删除它,那说很好。 所以我想知道它的功能是否相同???
而且,这一行:
let user:PFUser = (objects as NSArray!).lastObject as! PFUser
它在Xcode上显示是正确的,但是当我运行该应用程序时,它由于该行代码而死机并崩溃,原因是该错误表明“ [AnyObject]?无法转换为'NSArray'
有什么办法可以解决此问题?
我已经尝试了其他链接的内容:
“ '[AnyObject]? 不能转换为“ NSArray ”
而且我的代码没有错误,并且可以运行,但是用户名未更改为实际的用户名,仍然显示“ Label”
除非与查询缺少.objectID有关?
问题的第一部分(您注释掉的行):
在showUsername.whereKey("objectId", equalTo: post.objectForKey("user")!.objectId)
通过添加!来解开objectId。 如下
showUsername.whereKey("objectId", equalTo: post.objectForKey("user")!.objectId!)
问题的第二部分:
更换
let user:PFUser = (objects as NSArray!).lastObject as! PFUser
通过
let user = (objects as! [PFUser]).last
尝试这个:
(objects as? NSArray)?.lastObject as! PFUser
看起来对象是AnyObject的可选数组。 您可以将其强制转换为可选的NSArray。
无论如何,Swift数组也具有last属性。 你可以用
`let user:PFUser? = objects.last as? PFUser`
代替。 您的内部条件代码可以写成
let user = objects?.last as? PFUser
cell.usernameLabel.text = user?.username ?? ""
一些解释:
用户是可选的PFUser,是PFUser实例的PFUser引用,或者不包含。 类型是Optional 。 (哪个也可以写为PFUser? )。
当object ≠ nil时, objects.last
求值为objects?.last
,否则为nil 。
现在, 用户引用对象中的最后一个PFUser实例,否则为零 ( nil )。
当user ≠ nil时, user?.username
评估为user.username
,否则为nil 。
最后??
如果为非nil,则运算符返回左侧表达式,如果为非,则返回右侧。 也就是说,如果用户名是nil ,请使用空字符串代替( “” )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.