Swift:检查 UIImage 可失败初始化

Mag*_*goo 1 uiimage swift

我想检查图像是否存在,但是在可失败的初始化中......我可以做到丑陋,但我真的想知道是否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)
    }
}
Run Code Online (Sandbox Code Playgroud)

更干净但不编译

extension UIImage {

    convenience init?(_ name:String) {
        self.init(named: name)
        if self == nil { Assert("image \(name) missing yo") }
    }
}
Run Code Online (Sandbox Code Playgroud)

静态 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
   }
}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的时间

** 编辑 **

也许我需要两者?

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")
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

Tee*_*etz 5

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

extension Optional where Wrapped == UIImage {

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