Swift 致命错误:在展开可选值时意外发现nil。敏捷的

Swift 致命错误:在展开可选值时意外发现nil。敏捷的,swift,parse-platform,fatal-error,optional,unwrap,Swift,Parse Platform,Fatal Error,Optional,Unwrap,我是新来的斯威夫特。我的问题是我不确定如何展开可选值。当我打印object.objectForKey(“profile\u picture”)时,我可以看到Optional() 如果let执行“可选绑定”,您将使用if,仅在有问题的结果不是nil时执行块(并将变量profilePicture绑定到过程中的展开值) 可能是这样的: userQuery?.findObjectsInBackgroundWithBlock { objects, error in guard error == n

我是新来的斯威夫特。我的问题是我不确定如何展开可选值。当我打印object.objectForKey(“profile\u picture”)时,我可以看到
Optional()


如果let执行“可选绑定”,您将使用
if
,仅在有问题的结果不是
nil
时执行块(并将变量
profilePicture
绑定到过程中的展开值)

可能是这样的:

userQuery?.findObjectsInBackgroundWithBlock { objects, error in
    guard error == nil && objects != nil else {
        print(error)
        return
    }
    for object in objects! {
        if let profilePicture = object.objectForKey("profile_picture") as? PFFile {
            print(profilePicture)
            do {
                let data = try profilePicture.getData()
                self.userProfilePicture.image = UIImage(data: data)
            } catch let imageDataError {
                print(imageDataError)
            }
        }
    }
}
或者,如果您希望异步获取数据,可能:

userQuery?.findObjectsInBackgroundWithBlock { objects, error in
    guard error == nil && objects != nil else {
        print(error)
        return
    }
    for object in objects! {
        if let profilePicture = object.objectForKey("profile_picture") as? PFFile {
            profilePicture.getDataInBackgroundWithBlock { data, error in
                guard data != nil && error == nil else {
                    print(error)
                    return
                }
                self.userProfilePicture.image = UIImage(data: data!)
            }
        }
    }
}
如果让打开该可选文件,则可以使用
if来打开该文件。然后您必须获取与
PFFile
对象关联的
NSData
(大概是从
getData
方法或
getdatainbackgroundithblock


请参阅Swift编程语言中的讨论。

它可以工作。您是否介意进一步解释“if let”是什么?
if let
是“可选绑定”,即仅在相关结果不是
nil
时执行块(并在过程中将变量
profilePicture
绑定到未包装的值)。显然,如果对象是
nil
,则如果让
阻塞,它将跳过
。请参见Swift编程语言。好的。明白了。谢谢:)
userQuery?.findObjectsInBackgroundWithBlock { objects, error in
    guard error == nil && objects != nil else {
        print(error)
        return
    }
    for object in objects! {
        if let profilePicture = object.objectForKey("profile_picture") as? PFFile {
            profilePicture.getDataInBackgroundWithBlock { data, error in
                guard data != nil && error == nil else {
                    print(error)
                    return
                }
                self.userProfilePicture.image = UIImage(data: data!)
            }
        }
    }
}