Swift 致命错误:在展开可选值时意外发现nil。敏捷的
我是新来的斯威夫特。我的问题是我不确定如何展开可选值。当我打印object.objectForKey(“profile\u picture”)时,我可以看到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
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!)
}
}
}
}