我想创建一个CIFilter
的子类,如下所示:
class ColorMonochromeFilter: CIFilter {
required init(red: CGFloat!, green: CGFloat!, blue: CGFloat!) {
super.init(name: "ColorMonochrome")
setDefaults()
let colour = UIColor(red: red, green: green, blue: blue, alpha: 1.0)
setValue(colour, forKey: kCIInputColorKey)
}
}
我收到了以下错误信息:
- 类“ColorMonochromeFilter”未实现其超类所需的成员
- 必须调用超类“CIFilter”的指定初始化程序
init(coder aDecoder: NSCoder!)
,因为 CIFilter
符合 NSCoding
协议,而不是在 CIFilter
的扩展中声明的 init(name: String!)
。我可以通过添加以下内容来消除第一个错误:
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
虽然这似乎有点多余!
有没有解决第二个问题的方法?
我在这里尝试实现以下Swift等效代码:
@implementation ASHColorMonochromeFilter
+ (ASHColorMonochromeFilter *) filterWithRed: (CGFloat) red green:(CGFloat)green blue:(CGFloat)blue
{
ASHColorMonochromeFilter * filter = (ASHColorMonochromeFilter *)[ASHColorMonochromeFilter filterWithName: @"CIColorMonochrome"];
UIColor * color = [UIColor colorWithRed: red green: green blue: blue alpha: 1.0];
[filter setValue: color forKey: kCIImageColorSpace];
return filter;
}
init(name: "ColorMonochrome")
会加载一个预定义的过滤器,因此子类化可能没有意义。在子类中,您只需调用super.init()
即可。- 如果您只需要为ColorMonochrome过滤器添加一个额外的初始化程序,则可以定义一个扩展。(我已经准备了一个带有示例的答案,但我不确定那是否符合您的需求。) - Martin R