-1
func reloadFriendList() {
    var query = PFQuery(className:"userFriendClass")
    query.whereKey("username", equalTo:user!.username!)
    query.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]?, error: NSError?) -> Void in

        if error == nil {

            for object in objects! {
                self.friendList = object["friends"] as! [String]
                print(self.friendList)
                self.reloadTableView()
            }
        } else {

            // Log details of the failure
            print("Error: \(error!) \(error!.userInfo)")
        }

    }
}

我想保存对象[“朋友”],它是一个从用户名解析到的数组

var friendList = [String]()

但我收到错误:“致命错误:在展开可选值时意外发现 nil”,当数组为空时,这意味着用户没有任何朋友,但当用户至少有 1 个或更多朋友时它可以正常工作。

4

2 回答 2

1

你需要准备好你的代码来处理 nil 情况和 " objects" 是一个空数组的情况。

如果这是我的代码,我会这样做:

for object in objects {
    if let friendList = object["friends"]
    {
         self.friendList = friendList
    } else {
         // make sure that your class's `friendList` var is declared as an optional
         self.friendList = [String]()
    }
}
于 2015-11-06T11:33:14.457 回答
1

由于objects是可选的并且可能是nil,因此您需要安全地打开它。一种方法是使用nil 合并运算符将其解包或替换为空数组 if objectsis nil。您可以再次使用它来安全地打开好友列表:

for object in objects ?? [] {
    self.friendList = (object["friends"] as? [String]) ?? []

您还可以使用可选绑定 if let来安全地解包:

if let unwrappedObjects = objects {
    for object in unwrappedObjects {
        if let friends = object["friends"] as? [String] {
            self.friendsList = friends
        } else {
            // no friends :-(
            self.friendsList = []
        }
    }
}
于 2015-11-06T11:34:36.093 回答