簡體   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