在 UIImage.init 中检查包中是否存在图像

问题描述 投票:0回答:1

我想为 UIImage 编写 init ,它检查 .main 包的资产中是否存在图像(应用程序级别) - 从 .main 中获取它,如果不存在 - 从 .currentModule 中获取它(包级别)

目前它的工作原理就像只从 .currentModule 中获取:

public extension UIImage {
    convenience init?(originalName: String) {
        self.init(named: originalName, in: .currentModule, with: nil)
    }
}

我想找到方法,如果

self.init(named: originalName, in: .main, with: nil)
返回
nil
,请致电
self.init(named: originalName, in: .currentModule, with: nil)
所以写一些类似的东西

public extension UIImage {
    convenience init?(originalName: String) {
        if let _ = self.init(named: originalName, in: .main, with: nil) 
    else
        self.init(named: originalName, in: .currentModule, with: nil)
    }
}

但是无法编译

这个示例可以编译,但这里是在 .main 包中初始化图像的双重工作:

public extension UIImage {
    convenience init?(originalName: String) {
        if originalName == "" {
            return nil
        } else if let _ = UIImage(named: originalName, in: .main, with: nil) {
            self.init(named: originalName, in: .main, with: nil)
        } else {
            self.init(named: originalName, in: .currentModule, with: nil)
        }
    }
}

(如果您想知道如何使用 init 来实现此目的并使用“originalName:String”参数,-我们和我们的客户已经拥有使用此类 init 的大型代码库,并且有一个枚举而不是 String)

swift uikit uiimage
1个回答
0
投票

试试这个:

public extension UIImage {
    convenience init?(originalName: String) {
        if let image = UIImage(named: originalName, in: .main, with: nil) {
            self.init(cgImage: image.cgImage!)
        } else if let image = UIImage(named: originalName, in: .currentModule, with: nil) {
            self.init(cgImage: image.cgImage!)
        } else {
            return nil
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.