我正在尝试从parse.com查询,我会db每次接收大约100个对象。我在他们的网站上使用了swift示例代码,并且该应用程序不使用该代码构建。所以我环顾四周,发现人们使用的代码类似于:
var query = PFQuery(className:"posts")
query.whereKey("post", equalTo: "true")
query.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in
// do something
self.myDataArray = objects as! [String]
})
这不起作用,因为我试图将PFObject转换为String
我需要从每个对象获取一个值到一个swift字符串数组[String]。我如何得到一个文本值,而不是PFObject,如何将它放入swift字符串数组?
答案 0 :(得分:1)
我不能很快说话,但代码的问题是它试图将返回的PFObject
强制转换为字符串,但是你想提取一个字符串属性,所以(如果你真的想这样做):
for object in objects {
var someString = object.valueForKey("someAttributeName") as String
self.myDataArray.addObject(someString)
}
但请确保您需要这样做。我注意到很多新的解析/快速用户(特别是那些正在填充表格的用户)都希望丢弃返回的PFObject
,而只支持其中一个属性。考虑保留PFObject
并在以后根据需要提取属性。你可能会发现你也需要其他属性。
答案 1 :(得分:0)
对于初学者,我肯定会建议使用"如果让"模式来限定您的传入数据。这是一个很好的Swift功能,有助于避免运行时错误。
var query = PFQuery(className:"posts")
query.whereKey("post", equalTo: "true")
query.findObjectsInBackgroundWithBlock(
{ (objects: [AnyObject]?, error: NSError?) -> Void in
// check your incoming data and try to cast to array of "posts" objects.
if let foundPosts = objects as? [posts]
{
// iterate over posts and try to extract the attribute you're after
for post in foundPosts
{
// this won't crash if the value is nil
if let foundString = post.objectForKey("keyForStringYouWant") as? String
{
// found a good data value and was able to cast to string, add it to your array!
self.myDataArray.addObject(foundString)
}
}
})