如何获取CIFilter的显示名称?

时间:2015-01-10 20:58:35

标签: ios swift ios8 xcode6

我试图获取CIF过滤器的显示名称列表。找到this site,其中包含应该提供名称的常量(带有其他信息),但下面的代码不起作用。

控制台输出:

here 01
here 02
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<CIAccordionFoldTransition 0x7a672dc0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key CIAttributeFilterName.'

我的代码:

func getCIFilterName(filterName: String) -> String{
    var res = "abc"

    let fltr = CIFilter(name:filterName)
    println("here 01")
    if contains(fltr.attributes().keys, kCIAttributeFilterDisplayName){
        println("here 02")
        res = fltr.valueForKey(kCIAttributeFilterDisplayName) as String
    }
    println("here 03")

    return res
}

1 个答案:

答案 0 :(得分:1)

attributes方法返回字典。这样做更简单:

func getCIFilterName(filterName: String) -> String {
    var res = "abc"
    let fltr = CIFilter(name:filterName)
    if let disp = fltr.attributes()[kCIAttributeFilterDisplayName] as? String {
        res = disp
    }
    return res
}

但是如果我们失败了,我不喜欢你返回假值"abc"的伎俩。这是Optionals的目的 - 让我们远离这种“神奇的价值观”。所以重写如下:

func getCIFilterName(filterName: String) -> String! {
    var res : String! = nil
    let fltr = CIFilter(name:filterName)
    if let disp = fltr.attributes()[kCIAttributeFilterDisplayName] as? String {
        res = disp
    }
    return res
}

但是,不要忘记检查返回值是否为nil,否则如果您尝试将其用于任何事情(如果 为零),您将崩溃。