在Swift中使用输入参数对CIFilter进行子类化

在Swift中使用输入参数对CIFilter进行子类化,swift,cifilter,Swift,Cifilter,实例化上述筛选器将导致应用程序引发异常 CoreImage`-[CIFilter\u在dealloc\u调用setValue\u nil\u forKey\u时崩溃,可能是因为\u子类\u已经发布了它:: 有人知道如何解决这个问题吗?实际上问题是:CoreImage试图在运行时将CustomFilter的所有存储属性设置为nil(我无法解释原因)。而且由于inputRadius是非空的,所以核心映像不能将其设置为零 所以只要使用 class CustomFilter : CIFilter {

实例化上述筛选器将导致应用程序引发异常
CoreImage`-[CIFilter\u在dealloc\u调用setValue\u nil\u forKey\u时崩溃,可能是因为\u子类\u已经发布了它::


有人知道如何解决这个问题吗?

实际上问题是:CoreImage试图在运行时将CustomFilter的所有存储属性设置为nil(我无法解释原因)。而且由于inputRadius是非空的,所以核心映像不能将其设置为零

所以只要使用

class CustomFilter : CIFilter {
    var inputImage: CIImage?
    var inputRadius: CGFloat = 100.0

    override var name: String {
        return "CustomFilter"
    }

    override func setDefaults() {
        self.inputRadius = 100.0
    }

    override var outputImage: CIImage? {
        return nil
    }
}
或者在运行时通过重写

var inputRadius: NSNumber? // (don't use CGFloat?)
UPD.

使用Swift 3.1,您可以使用问题中的代码,但有一个小的例外:您应该正确地覆盖
名称
属性:

override func setNilValueForKey(key: String) {}
class CustomFilter : CIFilter {
    var inputImage: CIImage?
    var inputRadius: CGFloat = 100.0
    override var name: String {
        get { return "CustomFilter" }
        set { }
    }
    override func setDefaults() {
        super.setDefaults()
        self.inputRadius = 100.0
    }

    override var outputImage: CIImage? {
        return nil
    }
}