从空数组中检索值

时间:2014-10-03 21:11:52

标签: arrays swift parse-platform

我希望用户上传图片,其他用户请回复该图片。到目前为止一切正常,除非该特定图像对象的行为空,应用程序崩溃。

fatal error: unexpectedly found nil while unwrapping an Optional value

这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    var error = ""

    var query = PFQuery(className:"Posts")
    query.getObjectInBackgroundWithId(cellID) {
        (objects: PFObject!, error: NSError!) -> Void in
        if error == nil {      
            var array = objects.objectForKey("replies") as [String] // <- when error occurs the compiler point here.
            for object in  array {
                self.repliesArray.append(object as String)
            }
        } else { 
            self.displayError("Error", error: "Error retreiving")
        }
        self.tableView.reloadData()
    }
}

2 个答案:

答案 0 :(得分:0)

这有用吗?您不能将空对象附加到数组,因此这会附加一个空字符串而不是null。你还需要解释标记,以便它可以是零。

var array = objects.objectForKey("replies") as [String!]
for object in array {
    if object != nil {
        self.repliesArray.append(object as String)
    }
    else {
        self.repliesArray.append("")
    }
}

答案 1 :(得分:0)

query.getObjectInBackgroundWithId(cellID) {
    (objects: PFObject!, error: NSError!) -> Void in
    if error == nil {      
        var array = objects.objectForKey("replies") as [String] // <- when error occurs the compiler point here.

这里的关键是你接受一个隐式解包的可选项(PFObject!),这意味着它永远不会是nil的承诺,而是nil

理想情况下(*),类型应为(objects: PFObject?, error: NSError?) -> Void以使选项显式显式,并强制您执行所需的nil检查。即使来电者声称发送给您(PFObject!, NSError!) -> Void,我相信您也可以这样做,因为我认为Swift会为您进行隐式&gt;显式转换。

如果仍然无法做到这一点,那么在使用之前,您必须手动验证objects不是nil。 (这与@ Dehli的解决方案不同,后者会检查objects中包含 的内容是非nil。这不是问题;问题是objects本身是nil。)

(*)就现有界面而言,我在这里说“理想”。传递可选值/错误的元组是一个糟糕的模式。更好的解决方案是使用类似Result object的内容。