Swift:正在检查UIImage故障初始化

Swift:正在检查UIImage故障初始化,swift,uiimage,Swift,Uiimage,我想检查图像是否存在,但在可失败初始化中。。。我可以做得很难看,但我真的想知道self==nil是否可行 extension UIImage { convenience init?(_ name:String) { let image = UIImage(named:name) guard image != nil else { Assert("image \(name) missing yo"); return nil } self.i

我想检查图像是否存在,但在可失败初始化中。。。我可以做得很难看,但我真的想知道
self==nil
是否可行

extension UIImage {

    convenience init?(_ name:String) {
        let image = UIImage(named:name)
        guard image != nil else { Assert("image \(name) missing yo"); return nil }
        self.init(named: name)
    }
}
更干净,但不编译

extension UIImage {

    convenience init?(_ name:String) {
        self.init(named: name)
        if self == nil { Assert("image \(name) missing yo") }
    }
}
静态func没有init有趣

extension UIImage {

   static func with(_ name:String) -> UIImage? {
        let image = UIImage(named:name)
        if image == nil { Assert("image \(name) missing yo") }
        return image
   }
}
提前感谢您抽出时间

**编辑**

也许我两者都需要

extension UIImage {
    convenience init?(_ name:String) {
        self.init(named:name)
   }
}

extension Optional where Wrapped == UIImage {
    init?(_ name:String) {
        self.init(name)
        if self == nil {
            Assert("image \(name) missing yo")
        }
   }
}

我不能百分之百确定我是否正确回答了你的问题。但我想你想要这样的东西:(让我知道它是否有帮助或者为什么没有)


我不能百分之百确定我是否正确回答了你的问题。但我想你想要这样的东西:(让我知道它是否有帮助或者为什么没有)


您正在为
UIImage
编写扩展名,
UIImage
不能为空,因为它不是可选的。它肯定可以是??如果您使用UIImage(名为:“某物不正确”),您将获得零返回它不能:如果您这样标记它:
UIImage?
那么它可以是零。尝试在游乐场中将UIImage类型的变量设置为nil。它不会编译。
var-image:UIImage?=nil
编译精细这就是我说的:那么你的变量“image”的类型是
可选的
而不是
UIImage
你正在为
UIImage
编写一个扩展,
UIImage
不能为nil,因为它不是可选的。它肯定可以是??如果您使用UIImage(名为:“某物不正确”),您将获得零返回它不能:如果您这样标记它:
UIImage?
那么它可以是零。尝试在游乐场中将UIImage类型的变量设置为nil。它不会编译。
var-image:UIImage?=nil
编译fine这就是我说的:那么你的变量“image”是
可选的
类型,而不是
UIImage
就是这样!谢谢,除了我想要
self.init(命名:name)
?就这样!谢谢,除了我想要
self.init(命名:name)
extension Optional where Wrapped == UIImage {

    init?(_ name:String) {
        self.init(name)
        if self == nil {
            Assert("image \(name) missing yo")
        }
    }
}