使用dispatch_async()时Swift中的Optionals问题

时间:2015-05-19 00:29:38

标签: ios swift parse-platform optional

嘿伙计们我对Swift非常缺乏经验,所以我确信这个问题来自于我对语法的天真。一般来说,我试图从Parse检索数据并将结果读入NSArray。但是,我收到以下错误:

  

致命错误:在解包可选值时意外发现nil

我已在函数失败的代码中将其缩小到此部分。我在self.userData = res行之后收到错误。我确信我正在解释所述的零值,但不知道如何解决它。如果我执行var res = query!.findObjects()?之类的操作来使findObjects成为可选项,那么我会遇到编译器错误。只是有点卡住,任何有用的东西。

func getUserInfo() {
    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
    dispatch_async(dispatch_get_global_queue(priority, 0)) {
        let user = PFUser.currentUser()
        var query = PFUser.query()
        query!.whereKey("username", equalTo: self.username)
        var res = query!.findObjects()!
        dispatch_async(dispatch_get_main_queue()) {
            self.userData = res
            self.tableView.reloadData()
        }
    }
}

1 个答案:

答案 0 :(得分:3)

更有可能成为其中一条线:

    query!.whereKey("username", equalTo: self.username)
    var res = query!.findObjects()!

这些是解开Optional值的行。

请改为尝试:

if let unwrappedQuery = query {
    unwrappedQuery.whereKey("username", equalTo: self.username)
    if let result = query.findObjects() {
        dispatch_async(dispatch_get_main_queue()) {
            self.userData = result
            self.tableView.reloadData()
        }
    } else {
        println("query.findObjects returned nil")
    }
} else {
    println("query was nil")
}