覆盖 UIImage(named:)

pot*_*ato 6 overriding initialization uiimage subclassing ios

我正在重写 UIImage 类方法init(named:)。我的目标是能够检索图像的文件名。

代码如下所示:

class UIImageWithFileName: UIImage {

    let fileName: String

    override init(named:String){
        super.init(named)
    fileName = named
    }
}
Run Code Online (Sandbox Code Playgroud)

由于以下原因,此代码似乎是不可能的。

我创建了一个 UIImage 的子类,开始输入 init... 令我惊讶的是没有 init(named:) 方法可以覆盖。这是 init 方法的完整列表:

在此处输入图片说明

在此处输入图片说明

如何覆盖UIImage init(named:)

Mic*_*ann 3

事实证明“ init(named:”显然是不可继承的。

如果你查看 UIImage 定义,你会看到:

public class UIImage : NSObject, NSSecureCoding, NSCoding {

    public /*not inherited*/ init?(named name: String) // load from main bundle

    @available(iOS 8.0, *)
    public /*not inherited*/ init?(named name: String, inBundle bundle: NSBundle?, compatibleWithTraitCollection traitCollection: UITraitCollection?)
Run Code Online (Sandbox Code Playgroud)

这意味着您需要自己解析或打开文件并将原始数据传递到超类中。