0

我正在尝试从 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

我需要从每个对象中获取一个值到一个快速字符串数组 [String] 中。如何仅获取一个文本值,而不是 PFObject,以及如何将其放入 swift 字符串数组中?

4

2 回答 2

1

我说的不是很快,但是代码的问题是它试图将返回PFObject的字符串转换为字符串,但是你想提取一个字符串属性,所以(如果你真的想这样做):

for object in objects {
    var someString = object.valueForKey("someAttributeName") as String
    self.myDataArray.addObject(someString)
}

但请确保您需要这样做。我注意到许多新的 parse/swift 用户(尤其是那些正在填充表的用户)有放弃返回PFObject的 s 的冲动,而只支持他们的一个属性。考虑保留PFObjects 并稍后根据需要提取属性。您可能会发现您还需要其他属性。

于 2015-04-23T02:04:58.530 回答
0

对于初学者,我肯定会推荐使用“if let”模式来限定您的传入数据。这是一个很好的 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)
            }
        }
})
于 2015-04-23T03:18:55.187 回答