繁体   English   中英

如何获取CIFilter的显示名称?

[英]How to get the displayname of a CIFilter?

我正在尝试获取CIFilter的显示名称的列表。 找到了该站点该站点具有应给出名称的常量(带有其他信息),但是下面的代码不起作用。

控制台输出:

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
}

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进行比较,否则如果尝试将其用于任何内容(如果 nil),则可能会崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM