我試圖按照以下步驟創建的CIFilter
一個子類子類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
協議,而不是init(name: String!)
其在上CIFilter
擴展聲明。
我可以通過添加刪除第一個錯誤:
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
(儘管這似乎有點多餘!)
有沒有解決的第二個問題的方法嗎?
我想在這裏實現的是這樣做的雨燕相當於:
@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;
}
你真的想繼承CIFilter以添加/覆蓋方法,或者你只需要一個額外的初始化器? – 2014-08-29 18:12:44
那麼,在這種情況下,我想了解如何實現上述目標,如果可能的話 - 或者我的知識存在差距。 – 2014-08-29 19:35:33
我不是這方面的專家,但據我瞭解,'init(name:「ColorMonochrome」)'加載了一個預定義的過濾器,所以子類化可能沒有意義。在一個子類中,你只需要調用'super.init()'。 - 如果您只需要ColorMonochrome過濾器的附加初始化程序,那麼您可以定義一個擴展。 (我已經用一個例子準備了答案,但我不確定這是否是您需要的。) – 2014-08-29 19:39:25