Ios 为什么UIImage在Swift中具有默认值时是可选的

Ios 为什么UIImage在Swift中具有默认值时是可选的,ios,swift,uiimage,optional,Ios,Swift,Uiimage,Optional,我正在尝试编写一个函数,为联系人选择图片。 由于我设置了一个默认值,我认为编译器可以,但是当我尝试在完成闭包中返回结果时,它给出了错误:可选类型UIImage的值?必须展开为UIImage类型的值。我需要做什么 func getContactImage (contact:Contacts, completion:@escaping (_ myimage: UIImage)->()){//open 1 method let defaultimg = UIImage(name

我正在尝试编写一个函数,为联系人选择图片。 由于我设置了一个默认值,我认为编译器可以,但是当我尝试在完成闭包中返回结果时,它给出了错误:可选类型UIImage的值?必须展开为UIImage类型的值。我需要做什么

 func getContactImage (contact:Contacts, completion:@escaping (_ myimage: UIImage)->()){//open 1 method
        let defaultimg = UIImage(named:"headshot.png")
        var animg = self.loadImageNamed(contact.pic) ?? defaultimg
        if (contact.first==nil&&contact.last==nil) {
            if !(contact.co==nil) {
                animg = UIImage(named:"company.png")
            }
        }
        completion(animg) //ERROR HERE
    }
但是defaultimg和名为company.png的图像也可以为零。如果知道这些图像存在,可以强制展开它们:

let defaultimg = UIImage(named: "headshot.png")!

animg = UIImage(named: "company.png")!

因为您的imageheadshot.png可能不在目录中。这就是为什么它是可选的。例如,下面不是可选的


让image=UIImage

我被告知要尽量避免强制展开。你觉得这里可以吗?它是项目中的一个图像,因此很可能会显示。。。but@user1904273听着,如果你知道这个映像存在,并且你知道它,因为它是默认映像,为什么不呢?@RobertDresler,这与使用!基本相同@Sulthan是的,它本质上是这样的,因为它在展开可选值时抛出意外的find nil,这样您就可以知道有一个错误。成功了。但是,我必须使用animag=UIImagenamed company.png强制打开目录中的第二张图像!